hibernate關聯關係對映,包括單向關聯和雙向關聯,而
單向關聯又有:
一對一外來鍵單向關聯
一對一主鍵單向關聯
一對一連線表單向關聯
一對多外來鍵單向關聯
一對多連線表單向關聯
多對一外來鍵單向關聯
多對一連線表單向關聯
多對多單向關聯
雙向關聯有:
一對一外來鍵雙向關聯
一對一主鍵雙向關聯
一對一連線表雙向關聯
一對多外來鍵雙向關聯
一對多連線表雙向關聯
多對多雙向關聯
1、 單向一對一關聯對映(one-to-one):
兩個物件之間一對的關係,例如:person(人)-idcard(身份證)
有兩種策略可以實現一對一的關聯對映:
*主鍵關聯:即讓兩個物件具有相同的主鍵值,以表明它們之間的一一對應的關係;資料庫表不會有額外的字段來維護它們之間的關係,僅通過表的主鍵來關聯。如下圖:
idcard.hbm.xml對映檔案
<?xml version="1.0"?>注釋:cascade屬性,持久化級聯配置person.hbm.xml對映檔案
<?xml version="1.0"?>
idcard
*唯一外來鍵關聯:外來鍵關聯,本來是用於多對一的配置,但是加上唯一的限制之後(採用
標籤來對映,指定多的一端
unique
為true
,這樣就限制了多的一端的多重性為一),也可以用來表示一對一關聯關係,其實它就是多對一的特殊情況。如下圖:
idcard.hbm.xml對映檔案
<?xml version="1.0"?>
person.hbm.xml對映檔案
<?xml version="1.0"?>
idcard
注意:因為一對一的主鍵關聯對映擴充套件性不好,當我們的需要發生改變想要將其變為一對多的時候變無法操作了,所以我們遇到一對一關聯的時候經常會採用唯一外來鍵關聯來解決問題,而很少使用一對一主鍵關聯。
2、 單向多對一關聯對映(many-to-one):
多對一關聯對映原理:在多的一端加入乙個外來鍵,指向一的一端,如下圖:
關鍵對映**——在多的一端加入如下標籤對映:
3、單向一對多關聯對映(one-to-many):
一對多關聯對映和多對一關聯對映原理是一致的,都是在多的一端加入乙個外來鍵,指向一的一端。如下圖(學生和班級):
注意:它與多對一的區別是維護的關係不同
*多對一維護的關係是:多指向一的關係,有了此關係,載入多的時候可以將一載入上來
*一對多維護的關係是:一指向多的關係,有了此關係,在載入一的時候可以將多載入上來
關鍵對映**——在一的一端加入如下標籤對映:
缺陷:因為多的一端
student
不知道classes
的存在(也就是
student
沒有維護與
classes
的關係)所以在儲存
student
的時候關係字段
classesid
是為null
的,如果將該關係字段設定為非空,則將無法儲存資料,常用解決辦法是改用雙向關聯對映,參見6。
4、單向多對多對映(many-to-many):
多對多關聯對映新增加一張表才完成基本對映,如下圖:
關鍵對映**——可以在user的一端加入如下標籤對映:
5、雙向一對一關聯對映:
對比單向一對一對映,需要在idcard加入標籤,它不影響,只影響載入。如下圖:
雙向一對一主鍵對映關鍵對映**:
雙向一對一唯一外來鍵對映關鍵對映**——在person
端新加入如下標籤對映:
雙向一對一唯一外來鍵對映關鍵對映**——在idcard
端新加入如下標籤對映
:
注意:一對一唯一外來鍵關聯雙向採用標籤對映,必須指定
標籤中的
property-ref
屬性為關係欄位的名稱
6、雙向一對多關聯對映:
採用一對多雙向關聯對映的目的主要是為了主要是為了解決一對多單向關聯的缺陷而不是需求驅動的。
一對多雙向關聯的對映方式:
* 在一的一端的集合上採用標籤,在多的一端加入乙個外來鍵
* 在多的一端採用標籤
注意:標籤和
標籤加入的字段保持一直,否則會產生資料混亂
關鍵對映**:
在classes的一端加入如下標籤對映:
在student的一端加入如下標籤對映:
注釋:
inverse屬性
* inverse屬性可以用在一對多和多對多雙向關聯上,inverse屬性預設為false,為false表示本端可以維護關係,如果inverse為true,則本端不能維護關係,會交給另一端維護關係,本端失效。所以一對多關聯對映我們通常在多的一端維護關係,讓一的一端失效。
* inverse是控制方向上的反轉,只影響儲存
7、雙向多對多關聯對映:
雙向的目的就是為了兩端都能將對方載入上來,和單向多對多的區別就是雙向需要在兩端都加入標籤對映,需要注意的是:
* 生成的中間表名稱必須一樣
* 生成的中間表中的字段必須一樣
role
(角色)端關鍵對映**:
user
(使用者)端關鍵對映**:
總結:對於上面介紹多種關聯對映中,最重要的就是一對
一、多對一的對映。hibernate的關聯對映比較繁雜,用到的時候將此文當作工具對應查詢配置即可,無需刻意去全部記住。
Hibernate 實體關聯關係對映
hibernate 實體關聯關係對映 花了三天的業餘時間,終於寫完了hibernate關聯關係對映的所有例項,感覺還應該總結一下。hibernate對映關係錯綜複雜,在實際中真的都能用到嗎?不用行嗎?在我看來,hibernate提供這些對映關係,常用就是一對一和多對一,並且在能不用連線表的時候盡量不...
hibernate實體對映
1.寫注釋 格式為 屬性,表示本類的?關係 例如 2.寫模板 多對一 一對多 多對多 注 多對多中的table 表示填入中間 的名稱 3.填空 name屬性 屬性名 注釋中的第1問號 class屬性 關聯的實體型別 注釋中的第2個問號 column屬性 多對一中的 一般可以寫成屬性名加id字尾,如屬...
Hibernate關聯對映
單向關聯關係 單向1 1 和單向n 1配置唯一不一樣的地方是在many to one的標籤上加上unique true 即可完成1 1的對映 單向1 n public class person public int getid public void setid int id public stri...