1.主鍵關聯
    主鍵關聯,即兩(或多)張表的主鍵相一致,通過主鍵形成一對一的映射關系。一張表改動,另一種表的與之相關地發生改變。
    主控方生成id,然后和關聯表共享id。
    主控方hbm.xml:
    <hibernate-mapping>
        ...
        <id name="id" column="id">
            <generator class="native" />
        </id>
        ...
        <one-to-one name="passport" class=".." cascade="all" outer-join="true" />
    </hibernate-mapping>

    另一方hbm.xml:

    <hibernate-mapping>
        ...
        <id name="id" column="id">
            <generator class="foreign">
                <param name="property">user</param>
            </generator>
        </id>
        ...
        <one-to-one name="user" class=".." constrained="true" />
    </hibernate-mapping>

    通過foreign共享主鍵值。

一、一對唯一外鍵關聯映射——單向

1. 一對唯一外鍵關聯映射是多對一關聯映射的特例,可以采用<many-to-one>標簽,指定多的一端的unique=true,這樣就限  制了多的一端的多重性為一,通過這種手段映射一對一唯一外鍵關聯

   2.領域模型圖:

  3.配置

   Person.hbm.xml:

  <class name="com.bjsxt.hibernate.Person" table="t_person">

           <id name="id">

                 <generator class="native"/>

           </id>

           <property name="name"/>

           <many-to-one name="idCard" unique="true"/>

       </class>

 

    IDCard.hbm.xml:

<class name="com.bjsxt.hibernate.IdCard" table="t_idcard">

           <id name="id">

                 <generator class="native"/>

           </id>

           <property name="cardNo"/>

      </class>

二、 一對唯一外鍵關聯映射——雙向

       1. 一對一唯一外鍵關聯雙向,需要在另一端(idcard),添加<one-to-one>標簽,指示hibernate如何加載其關聯對象,默認根據主鍵加載person,外鍵關聯映射中,因為兩個實體采用的是person的外鍵維護的關系,所以不能指定主鍵加載person,而要根據person的外鍵加載,所以采用如下映射方式:

<one-to-one name="person" property-ref="idCard"/>

2.領域模型圖:

3.具體配置:

Person.hbm.xml:

<class name="com.bjsxt.hibernate.Person" table="t_person">

           <id name="id">

                 <generator class="native"/>

           </id>

           <property name="name"/>

           <many-to-one name="idCard" unique="true"/>

      </class>

 

IDCard.hbm.xml

<class name="com.bjsxt.hibernate.IdCard" table="t_idcard">

           <id name="id">

                 <generator class="native"/>

           </id>

           <property name="cardNo"/>

           <one-to-one name="person" property-ref="idCard"/>

      </class>