Bonjour,

Je voudrais savoir jusqu'où il est possible d'ajouter des attributs à une many to many? Je m'explique :

Supposons que l'on ait une table Users et une table Games. Un joueur peut jouer à plusieurs parties, et une partie a plusieurs joueurs. C'est donc un cas classique de many-to-many. Je l'ai réprésenté ainsi :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
<class name="User" table="Users">
    (...)
        <set name="games" table="UserGames">
            <key column="userId"/>
            <many-to-many class="Game" column="gameId"/>
        </set>
</class>
 
<class name="Game" table="Games">
    (...)
        <set name="users" table="UserGames" inverse="true">
            <key column="gameId"/>
            <many-to-many class="User" column="userId"/>
        </set>
 
</class>

Maintenant, j'ai envie de rajouter un champ statut lié à l'utilisateur et à une partie. Mais j'ai envie de garder mes relations users et games. Comment faire?

- Créer explicitement la table UserGames via fichier .hbm.xml ? Je suppose que oui. Que mettre dans cette table? Un composite id (déconseillé dans la litérature)?
- Remplacer les many-to-many par des one-to-many? Mais alors je perds mes relations...

Une idée?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
    <class name="UserGames" table="UserGames">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="status"/>
        <many-to-one name="user" column="userId" class="User"/>
        <many-to-one name="game" column="gameId" class="Game"/>
    </class>