一對一關聯(包括兩種類型)
1、主鍵關聯
2、唯一外鍵關聯
一個典型實例:中國公民只允許有一張身份證. 以T_User 和T_Idcard爲例
T_User( id int <pk,fk2> ,
name varchar(50) ,
age int
) ;
T_Idcard(
id int <pk> ,
serial varchar(30) ,
expiry int
) ;
通過one-to-one節點進行聲明
TUser.hbm.xml
<one-to-one name="idcard" 一對一映射節點
class="com.gjun.vo.Idcard"
cascade="all" 級聯關係
/>
級聯(cascade)在Hibernate關係中是個非常重要概念.它指的是當主控方執行操作時,關聯對象(被控方)是否同步執行同一操作.
TIdcard.hbm.xml
<id name="id" column="id">
<generator class="foreign"> foreign主鍵生成
<param name="property">user</param>
</generator>
</id>
<one-to-one name="user" 一對一映射節點
class="com.gjun.vo.User"
constrained="tue" 約束
/>
---------------------------------------------------------------------------------------------------------------------------------------------------------
雙向一對多關聯
實例:一個用戶擁有辦公辦公室地址,家庭地址等多個地址屬性.
TUser.hbm.xml
<set name="addresses"
inverse="true" 控制方向反轉
lazy="false" cascade="all">
<key column="user_id">
</key>
<one-to-many class="com.gjun.vo.Address"/>
</set>
TAddress.hbm.xml
<many-to-one name="user"
class="com.gjun.vo.User"
cascade="none"
column="user_id"
not-null="true"
/>
------------------------------------------------------------------------------------------------------------------------------------------------------------------
一對多雙向自關聯
同一個類既扮演了one的角色,又扮演了many的角色。典型的應用案例就是一個種類分層模型。
商品分類表(ProductType):
id int(11) <pk> ID號 -----自身外鍵參照
parent_id int(11) <fk> 父類ID號
cate_no varchar(50) 類別編碼
cate_name varchar(50) 類別名稱
實體類:
id : Integer
parent : ProductType
childs : Set
cateNo : String
cateName : String
<hibernate-mapping>
<class name="com.gjun.vo.ProductType" table="ProductType">
<id name="id" type="integer" column="ID">
<generator class="identity" />
</id>
<many-to-one name="parent"
column="PARENT_ID"
class="com.gjun.vo.ProductType"
lazy="false"/>
<set name="childs"
cascade="all"
lazy="false"
inerse="true">
<key column="PARENT_ID" />
<one-to-many class="com.gjun.vo.ProductType" />
</hibernate-mapping>