hibernate一对一单项关联映射

一、主键关联

  1、两个实体对象的主键一样,以表明它们之间的一一对应关系;

  2、不需要多余的外键字段来维护关系,仅通过主键来关联,即Person的主键要依赖IdCard的主键,他们共用一个主键值。

Person.hbm.xml文件:

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping package="com.liang.hibernate">  
    <class name="Person" table="t_person">  
        <id name="id">  
        <!-- 采用foreign生成策略,forgeign会取得另外一个关联对象的标识 -->  
            <generator class="foreign" >  
                <param name="property">idCard</param>  
            </generator>  
        </id>  
        <property name="name"></property>  
        <!--   
            one-to-one指示hibernate如何加载其关联对象,默认根据主键加载  
            也就是拿到关系字段值,根据对端的主键来加载关联对象  
              
            constrained="true"表示约束,当前主键(person的主键)还是一个外键  
            参照了对端的主键(IdCard的主键),也就是会生成外键约束语句  
         -->  
         <!-- idCard属性,表达的是本对象与IdCard的一对一关系。 -->  
        <one-to-one name="idCard" class="IdCard"  constrained="true"></one-to-one>  
    </class>  
</hibernate-mapping>  

  

二、唯一外键关联

 1、两个实体对象用一个外键来关联,以表表明对象之间的关系。

 2、其实它是多对一关联映射的特例,多的一端加上唯一的限制之后,用来表示一对一的关联关系。

Person.hbm.xml文件:

<?xml version="1.0"?>  
<!DOCTYPE hibernate-mapping PUBLIC   
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
<hibernate-mapping package="com.liang.hibernate">  
    <class name="Person" table="t_person">  
        <id name="id">  
            <generator class="native" ></generator>  
        </id>  
        <property name="name"></property>  
        <!-- 由于它是一对一的唯一外键关联,它是多对一关联的特例,注释可以直接写成多对一关联-->  
        <!-- idCard属性,表达的是本对象与IdCard的多对一关系。 -->  
     <!-- 采用<mang-to-one>标签来映射,指定多的一端unique为true,  
      这样就限制了多的一端的多重性为一,就是这样来映射的。 
      -->
    
<many-to-one name="idCard" class="IdCard" column="idCardId" unique="true"></many-to-one>
    </class>  
</hibernate-mapping>  

  

原文地址:https://www.cnblogs.com/gXing/p/8649675.html