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>