我想知道是否有人可以帮助我。我正在尝试找出谷歌的内容(或任何其他想法!!)基本上我有一个用户实体和俱乐部实体之间的双向多对多映射(通过名为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 |作用
并且能够访问双方的角色......
答案 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列之外)。