2010-04-29 5 views
2

Je blessé si quelqu'un pourrait être en mesure de m'aider. J'essaie de trouver quoi google pour (ou d'autres idées !!) fondamentalement j'ai un mappage bidirectionnel de plusieurs à plusieurs entre une entité utilisateur et une entité de club (via une table de jointure appelée userClubs) Je veux maintenant inclure une colonne dans userClubs qui représente le rôle de sorte que lorsque j'appelle user.getClubs() je peux aussi déterminer quel niveau d'accès ils ont. Existe-t-il une façon intelligente de faire cela en utilisant hibernate ou dois-je repenser la structure de la base de données? Merci pour toute aide (ou tout simplement pour lire loin !!)Hibernate Bi-Directional de nombreux conseils de cartographie!

l'user.hbm.xml ressemble un peu à

<set name="clubs" table="userClubs" cascade="save-update"> 
     <key column="user_ID"/> 
     <many-to-many column="activity_ID" 
      class="com.ActivityGB.client.domain.Activity"/> 
</set> 

la partie activity.hbm.xml

<set name="members" inverse="true" table="userClubs" cascade="save-update"> 
     <key column="activity_ID"/> 
     <many-to-many column="user_ID" 
      class="com.ActivityGB.client.domain.User"/> 
</set> 

La table userClubs actuelle contient les champs id | user_ID | activity_id

Je voudrais inclure là-dedans id | user_ID | ID_activité | rôle

et être en mesure d'accéder au rôle des deux côtés ...

Répondre

1

La meilleure façon serait de créer une entité de la table de jointure.

vous pouvez utiliser les deux clés étrangères pour les entités club et utilisateur comme ID (en utilisant < ID composite >), mais je conseillerais d'ajouter une colonne ID technique, et de définir une contrainte unique sur les clés étrangères (sinon, la cascade lorsque vous enregistrez Club ou Utilisateur ne fonctionnera pas plus d'infos ici: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid). Si vous nommez votre nouvelle entité UserClub, vous aurez besoin d'un un-à-plusieurs de User à UserClub et de Club à UserClub, et plusieurs à un de UserClub à Club et de UserClub à Utilisateur.

Vous aurez refactoring à faire sur le code java, mais vous ne serez pas à changer le db (à l'exception de l'ajout de l'identifiant et les colonnes de rôle).

+0

Cela a fonctionné un charme, merci pour votre réponse rapide Thierry :) – Rob