即可達到一對一的效果,接下來簡單說明一下另外一個一對一的用法
想法即是讓多對一中,"一"的這一方的主鍵成為外來鍵,這樣多的這方即可不用再有外鍵關連到一的這方
以上一篇的例子來說明,Customer & Address (多對一)
即可以將 Customer 的外鍵 address_id 取消,並以 Address 的主鍵當做外鍵即可
那在這兩個類別的寫法都不變,同樣都是有關連到彼此的雙向關係
唯一不同的救是組態檔的設定,稍微來看一下
Customer.hbm.xml
<class name="MapPOJO.Customer" table="Customer">
<id name="id" column="id">
<generator class="native" />
</id>
//.....省略其他屬性.....
<one-to-one name="address" class="MapPOJO.Address" cascade="all" />
</class>
Address.hbm.xml
<class name="MapPOJO.Address" table="Address">
<id name="id" column="id">
<generator class="foreign" >
<param name="property">customer</param>
</generator>
</id> <one-to-one name="customer" class="MapPOJO.Customer"
constrained="true" />
</class>
紅色字體的部分一定要加上去
Address 的主鍵定義成 foreign,意思是 id 即是主鍵也是外鍵
以上是一對一的主鍵關聯的寫法
至於再一對一當中如果不要寫成雙向關聯 也就是只要兩物件之間只有單向關係
以多對一的例子並以上一篇的寫法來看
我們只要將 "多" 的這一方在 many-to-one 標籤中 設定 unique="true"
即可讓該外鍵唯一,形成單向一對一的關係
不需要再增加 Address 的 one-to-one 標籤了
即是讓 Customer 有 reference 到 Address
沒有留言:
張貼留言