hibernate一对一关联映射的四种方式

一、hibernate一对一主键关联映射(单向关联Person----->IdCard)

一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段了

Person.hbm.xml

 1 <class name="com.bjpowernode.hibernate.Person" table="t_person">  2  3   <id name="id">   4  5     <!-- 采用foreign生成策略,forgeign会取得关联对象的标识 -->   6  7     <generator class="foreign">    8  9       <!-- property只关联对象 -->   10 11       <param name="property">idCard</param>  12 13     </generator> 14 15   </id> 16 17   <property name="name"/> 18 19   <!--   one-to-one指示hibernate如何加载其关联对象,默认根据主键加载   也就是拿到关系字段值,根据对端的主键来加载关联对象     constrained="true表示,当前主键(person的主键)还是一个外键   参照了对端的主键(IdCard的主键),也就是会生成外键约束语句   -->20 21   <one-to-one name="idCard" constrained="true"/>22 23 </class>

IdCard.hbm.xml

1 <class name="gdou.wteam.hibernate.IdCard" table="t_idCard">2   <id name="id">3    <generator class="native"/>4   </id>5   <property name="cardNo"/>6  </class>

public class Person {
  private int id;
  private String name;
  private IdCard idCard;

  //省略set()、get()方法

}

public class IdCard {
  private int id;
  private String cardNo;

  //省略set()、get()方法

}

二、hibernate一对一主键关联映射(双向关联Person<----->IdCard)

需要在IdCard加入<one-to-one>标签,指示hibernate将关联对象Person 根据主键加载上来

<one-to-one>不影响存储,只影响加载

Person.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6     <class name="gdou.wteam.hibernate.Person" table="t_person"> 7         <id name="id"> 8             <!-- 采用foreign生成策略,forgeign会取得关联对象的标识 --> 9             <generator class="foreign">10                 <!-- property只关联对象 -->11                 <param name="property">idCard</param>12             </generator>13         </id>14         <property name="name"/>15         <!-- 16             one-to-one指示hibernate如何加载其关联对象,默认根据主键加载17             也就是拿到关系字段值,根据对端的主键来加载关联对象18         19             constrained="true表示,当前主键(person的主键)还是一个外键20             参照了对端的主键(IdCard的主键),也就是会生成外键约束语句21          -->22         <one-to-one name="idCard" constrained="true"/>23     </class>24 </hibernate-mapping>

IdCard.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6     <class name="gdou.wteam.hibernate.IdCard" table="t_idCard"> 7         <id name="id"> 8             <generator class="native"/> 9         </id>10         <property name="cardNo"/>11         <one-to-one name="person" />12     </class>13 </hibernate-mapping>

public class Person {   

  private int id;   

  private String name;   

  private IdCard idCard;

  //省略set()、get()方法

}

public class IdCard {

  private int id;

  private String cardNo;

  private Person person;

  //省略set()、get()方法

}

 

三、hibernate一对一唯一外键关联映射(单向关联Person----->IdCard)

一对一唯一外键关联映射其实是多对一的特例

采用<many-to-one>标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性 为一,就是这样来映射的。

Person.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6     <class name="gdou.wteam.hibernate.Person" table="t_person"> 7         <id name="id"> 8             <generator class="native"/> 9         </id>10         <property name="name"/>11         <many-to-one name="idCard" unique="true"/>12     </class>13 </hibernate-mapping>

IdCard.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6     <class name="gdou.wteam.hibernate.IdCard" table="t_idCard"> 7         <id name="id"> 8             <generator class="native"/> 9         </id>10         <property name="cardNo"/>11     </class>12 </hibernate-mapping>

 public class Person {   

  private int id;   

  private String name;   

  private IdCard idCard;

  //省略set()、get()方法

}

public class IdCard {

  private int id;

  private String cardNo;

  //省略set()、get()方法

}

 

四、hibernate一对一唯一外键关联映射(双向关联Person<----->IdCard)

一对一唯一外键关联双向采用<one-to-one>标签映射,必须指定<one-to-one> 标签中的property-ref属性为关系字段的名称

Person.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6     <class name="gdou.wteam.hibernate.Person" table="t_person"> 7         <id name="id"> 8             <generator class="native"/> 9         </id>10         <property name="name"/>11         <many-to-one name="idCard" unique="true"/>12     </class>13 </hibernate-mapping>

IdCard.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 
 3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping> 6     <class name="gdou.wteam.hibernate.IdCard" table="t_idCard"> 7         <id name="id"> 8             <generator class="native"/> 9         </id>10         <property name="cardNo"/>11         <one-to-one name="person" property-ref="idCard"></one-to-one>12     </class>13 </hibernate-mapping>

public class Person {   

  private int id;   

  private String name;   

  private IdCard idCard;

  //省略set()、get()方法

}

public class IdCard {

  private int id;

  private String cardNo;

  private Person person;

  //省略set()、get()方法

}

转载于:https://my.oschina.net/u/178116/blog/265960

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值