Hibernate中的關聯關係

初學 hibernate 時是被 hibernate 中的複雜的關係搞得暈頭轉向。 一對多 ,多對一,多對多。單向,雙向等等

問題就出在,找不到參照方物,其實只要找準參照物,各種關係自然迎刃而解。在關係型數據庫中 實際上通過主外鍵只支持多對一,或是一對一單向關聯。

1,多對一單向關聯 : 以客戶表 (customer) 和定單表(orders )爲例。一個客戶可以發出多個定單,而一個定單只可以屬於一個客戶。從 orders 到customer 就是 多對一的關係。這就意味着, orders 中應該有一個 Customer類型的屬性。

[img]https://p-blog.csdn.net/images/p_blog_csdn_net/caoyinghui1986/Noname.jpg[/img]
因爲在關係型數據庫中只有主外鍵參照關係,而且總是有 many 方參照 one 方,這樣可以消除數據冗餘。

所以一般是一主鍵表爲參照物。

在hbm.xml 配置時
   <many-to-one 

name="customer"

column="id"

class="hib.Customer"

not-null="true"

>


name: 指定了持久化類的屬性名 (Order類的 customer屬性)

column : 指定屬性對應的外鍵 (order表的 customer_id)

class :指定了持久化類的類型。

2,一對多單向關聯 :從 customer 到 order 是一對多。意味着每個 customer對象會引用一組order對象。

所以在 customer中應該定義一個集合類型的屬性,來關聯所引用的 order對象。
[img]https://p-blog.csdn.net/images/p_blog_csdn_net/caoyinghui1986/Noname2.jpg[/img]
hbm.xml 文件配置時
   
<set

name="orders"

cascade="save-update"

>

<key column ="custome_id" />

<one-to-many class="hib.Order"/>

</set>

name :指定持久化類的屬性名 (Customer類的 orders 屬性)

<set> : 表明 Customer 類的屬性類型爲 java.util.Set 類型。

<one-to-many> :表明 orders 集合中存放的是一組 Order對象。

如果一個類關聯另一個類,而另一個類不關聯這個類。我們就認爲這種關聯是單向關聯

兩個類相互包含另一個類的屬性時 我們就人認爲着種關聯是雙向關聯。

3,一對多雙向關聯:綜合上面兩種。

[img]https://p-blog.csdn.net/images/p_blog_csdn_net/caoyinghui1986/Noname3.jpg[/img]
發佈了47 篇原創文章 · 獲贊 4 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章