2010-04-29 106 views
2

如果有人能幫助我,我就會摔倒。我正在努力研究谷歌(或任何其他想法!!)基本上我有一個雙向多對多的用戶實體和俱樂部實體之間的映射(通過名爲userClubs的連接表)我現在想包括一列在代表角色的userClubs中,當我調用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

最簡單的方法是創建一個實體進行連接表的。

你可以使用兩個外鍵作爲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列之外)。

+0

這工作的魅力,謝謝你的迅速反應蒂埃裏:) – Rob 2010-05-05 14:33:59