通過前兩篇Hibernate 一對一,一對多幾個映射關係的介紹,還剩下最後一大類:多對多映射。當然還是有單向和雙向之分。
單向多對多映射
舉例:用戶和角色的關係。一個用戶可以有多個角色,一個角色可以有多個用戶。
實現策略:n:n的關係,一定會有一張第三張表來維護他們的關係。
如圖:
關鍵代碼:如果是user單向對role 那麼則在user的一端加入標籤映射。
<set name="roles" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com.hibernate.Role" column="role_id"/>
</set>
二)雙向多對多映射
在實際中到底是採用單向映射還是採用雙向映射都是根據具體的需求,看是不是需要從一端把另一端加載出來,同時也從另一端把對方加載出來。
實現策略:
兩端都添加 many-to-many>的標籤映射。不過要注意,兩端生成的中間表名稱和字段都必須一致。
Role端
<set name="users" table="t_user_role">
<key column="role_id"/>
<many-to-many class="com.hibernate.User" column="user_id"/>
</set>
User端
<set name="roles" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com. hibernate.Role" column="role_id"/>
</set>
總結:
多對多關聯映射的實現都比較簡單。主要是在實際應用中根據不同的需求看是採取單向還是雙向。也注意兩端的一致性即可。