一)一對一關聯映射
對比單向一對一映射,需要在IdCard加入<one-to-one>標籤,它不影響,隻影響加載。如下圖:
雙向一對一主鍵映射關鍵映射代碼——在IdCard端新加入如下標籤映射:
<one-to-one name="person"/>
雙向一對一唯一外鍵映射關鍵映射代碼——在IdCard端新加入如下標籤映射:
採用<one - to-one>標籤映射,並需指定其中的property-ref屬性爲關係字段的名稱。
<one-to-one name="person"property-ref="idCard"/>
二)多對一關聯映射
該映射主要是爲了解決一對多單向關聯的缺陷,並非業務需求導致的。在一的一端的集合上採用標籤,並用標籤。在多的一端加入一個外鍵,同時在多的一端採用標籤。
Hbm.xml文件配置:
student(多的一端)
<many-to-one name="classes" column="classesid"/>
<set name="students"inverse="true">
<key column="classesid"/>
<one-to-many class="com.hibernate.Student"/>
</set>
PS:inverse屬性可以用在一對多和多對多雙向關聯上,inverse屬性默認爲false,爲false表示本端可以維護關係,如果inverse爲true,則本端不能維護關係,會交給另一端維護關係,本端失效。所以一對多關聯映射我們通常在多的一端維護關係,讓一的一端失效。inverse是控制方向上的反轉,隻影響存儲。
三)多對多關聯映射
在實際中到底是採用單向映射還是採用雙向映射都是根據具體的需求,看是不是需要從一端把另一端加載出來,同時也從另一端把對方加載出來。兩端都添加 many-to-many>的標籤映射。不過要注意,兩端生成的中間表名稱和字段都必須一致。
Hbm.xml文件配置:
role端:
<set name="users" table="t_user_role">
<key column="role_id"/>
<many-to-many class="com.hibernate.User" column="user_id"/>
</set>
<set name="roles" table="t_user_role">
<key column="user_id"/>
<many-to-many class="com. hibernate.Role" column="role_id"/>
</set>
總結:
在上篇文章中,已經談到單向的關聯映射,可以和本文的雙向關聯映射對比,在實際應用中選擇合適的策略