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