Hibernate 數據關聯

一對一關聯(包括兩種類型)

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>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章