浅析Hibernate映射(二)——关系映射(3)

双向一对一关联映射

与单向一对一关联映射一样,双向映射依然可以采用两种方式实现:1、主键关联;2、唯一外键关联

1、主键关联

映射出的关系模型与单向一样:

映射文件与单向的区别在于:需要在Card加入<one-to-one>标签,指示hibernate将关联对象User根据主键加载上来。<one-to-one>不影响存储,只影响加载

User.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 package="com.jialin.hibernate">  
  6.   
  7.     <class name="User">  
  8.         <id name="id">  
  9.             <!--采用foreign策略,可以取得关联对象的主键  -->  
  10.             <generator class="foreign">  
  11.                 <!--property代表要关联的对象 -->  
  12.                 <param name="property">card</param>  
  13.             </generator>  
  14.         </id>  
  15.         <property name="name" />  
  16.           
  17.         <one-to-one name="card" />  
  18.     </class>  
  19.   
  20. </hibernate-mapping>  

Card.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 package="com.jialin.hibernate">  
  6.   
  7.     <class name="Card">  
  8.         <id name="id">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="cardNo" />  
  12.         <!--<one-to-one>不影响存储,只影响加载-->  
  13.         <one-to-one name="person" />  
  14.   
  15.     </class>  
  16.   
  17. </hibernate-mapping>  


2、唯一外键关联

映射出的关系模型与单向一样:

映射文件:

User.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 package="com.jialin.hibernate">  
  6.   
  7.     <class name="Person">  
  8.         <id name="id">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="name" />  
  12.         <many-to-one name="card" unique="true"></many-to-one>  
  13.     </class>  
  14.   
  15. </hibernate-mapping>  

Card.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 package="com.jialin.hibernate">  
  6.   
  7.     <class name="Card">  
  8.         <id name="id">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="cardNo" />  
  12.         <!--必须指定<one-to-one>  
  13. 标签中的property-ref属性为关系字段的名称-->  
  14.         <one-to-one name="person" property-ref="card"/>  
    1. </class>   
    2. lt;/hibernate-mapping>  
原文地址:https://www.cnblogs.com/niuchunjian/p/4520283.html