Hibernate双向多对多映射建议!

时间:2010-04-29 16:55:57

标签: hibernate orm mappings

我想知道是否有人可以帮助我。我正在尝试找出谷歌的内容(或任何其他想法!!)基本上我有一个用户实体和俱乐部实体之间的双向多对多映射(通过名为userClubs的连接表)我现在想要包括一个列在表示角色的userClub中,当我调用user.getClubs()时,我也可以计算出他们拥有的访问级别。使用hibernate是否有一种聪明的方法可以做到这一点,还是需要重新思考数据库结构?感谢您的帮助(或者只是为了阅读这篇文章!!)

user.hbm.xml看起来有点像

<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>

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>

当前的userClubs表包含字段 id | user_ID | ACTIVITY_ID

我想在那里加入 id | user_ID | activity_ID |作用

并且能够访问双方的角色......

1 个答案:

答案 0 :(得分:1)

最简单的方法是从连接表中创建实体。

您可以使用俱乐部和用户实体的两个外键作为id(使用&lt; composite-id&gt;),但我建议添加技术ID列,并在外键上设置唯一约束(否则,保存俱乐部或用户时的级联将无法使用。更多信息请参见:http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid)。

如果您为新实体UserClub命名,则需要从用户到用户俱乐部以及从俱乐部到用户俱乐部的一对多,以及从用户俱乐部到俱乐部以及从用户俱乐部到用户的多对一。

您将对Java代码进行一些重构,但您不必更改数据库(除了添加id和role列之外)。