2

如果有人能帮助我,我会受伤。我正在尝试找出谷歌搜索的内容(或任何其他想法!!)基本上我在用户实体和俱乐部实体之间有一个双向多对多映射(通过一个名为 userClubs 的连接表)我现在想包含一个列在代表角色的 userClubs 中,这样当我调用 user.getClubs() 时,我还可以计算出他们拥有什么级别的访问权限。有没有一种聪明的方法可以使用休眠来做到这一点,还是我需要重新考虑数据库结构?感谢您的任何帮助(或者只是为了阅读这里!!)

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 | 用户 ID | 活动 ID

我想在其中包含 id | 用户 ID | 活动ID | 角色

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

4

1 回答 1

1

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

您可以使用俱乐部和用户实体的两个外键作为 id(使用 <composite-id>),但我建议添加一个技术 id 列,并且只对外键设置一个唯一约束(否则,级联当您保存俱乐部或用户时将不起作用。更多信息在这里:http ://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-compositeid )。

如果将新实体命名为 UserClub,则需要从 User 到 UserClub 和从 Club 到 UserClub 的一对多,以及从 UserClub 到 Club 以及从 UserClub 到 User 的多对一。

您将对 java 代码进行一些重构,但您不必更改 db(除了添加 id 和 role 列)。

于 2010-04-29T23:48:04.437 回答