Hibernate 关联关系学习笔记


一、总体来分有一对一、一对多、多对一、多对多这四种关系。

二、一对一关系

1、单向主键


2、单向外键

具体需求是Husband实体中保存Wife的引用,得到husband的实体后就可以取得wife实体。且关系是一对一。

Husband实体简略信息

[java]
  1. private int id;  
  2. private String name;  
  3. private int age;  
  4. private Wife wife;  
Wife实体简略信息

[java]
  1. private int id;  
  2. private String name;  
现在使用xml构建从husband到wife的一对一关联,xml中使用的是<many-to-one>标签,理解的大概是外键一般都是保存在多这一方,站在当前实体husband的位置上考虑,即保存引用的这一方,这样就存在关联的关系,之后加上加上unique属性进行限定为一对一的关系。(多对一的特殊情况)

[html]
  1. <hibernate-mapping>  
  2.     <class name="com.akwolf.bean.Husband" table="HUSBAND">  
  3.         <id name="id" type="int">  
  4.             <column name="ID" />  
  5.             <generator class="native" />  
  6.         </id>  
  7.         <property name="name" type="java.lang.String">  
  8.             <column name="NAME" />  
  9.         </property>  
  10.         <property name="age" type="int">  
  11.             <column name="AGE" />  
  12.         </property>  
  13.         <many-to-one name="wife" class="com.akwolf.bean.Wife" fetch="join" unique="true">  
  14.             <column name="WIFE" />  
  15.         </many-to-one>  
  16.     </class>  
  17. </hibernate-mapping>  

Wife.hbm.xml简要配置。

[html]
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2011-10-2 22:15:15 by Hibernate Tools 3.4.0.CR1 -->  
  5. <hibernate-mapping>  
  6.     <class name="com.akwolf.bean.Wife" table="WIFE">  
  7.         <id name="id" type="int">  
  8.             <column name="ID" />  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="name" type="java.lang.String">  
  12.             <column name="NAME" />  
  13.         </property>  
  14.     </class>  
  15. </hibernate-mapping>  
Annotation双向必设mappedBy

3、双向主键


4、双向外键

现在在wife添加一个Husband的属性使其可以找到husband,则需在Wife.hbm.xml中进行配置

[html]
  1. <hibernate-mapping>  
  2.     <class name="com.akwolf.bean.Wife" table="WIFE">  
  3.         <id name="id" type="int">  
  4.             <column name="ID" />  
  5.             <generator class="native" />  
  6.         </id>  
  7.         <property name="name" type="java.lang.String">  
  8.             <column name="NAME" />  
  9.         </property>  
  10.         <one-to-one name="husband" property-ref="wife"></one-to-one>  
  11.     </class>  
  12. </hibernate-mapping>  
对于property-ref="wife",就是指明要进行关联的属性已经在husband的wife属性进行关联了

从wife端查询husband时,hibernate生成的查询语句

[java]
  1. Hibernate:   
  2.     select  
  3.         wife0_.ID as ID1_1_,  
  4.         wife0_.NAME as NAME1_1_,  
  5.         husband1_.ID as ID0_0_,  
  6.         husband1_.NAME as NAME0_0_,  
  7.         husband1_.AGE as AGE0_0_,  
  8.         husband1_.WIFE as WIFE0_0_   
  9.     from  
  10.         WIFE wife0_   
  11.     left outer join  
  12.         HUSBAND husband1_   
  13.             on wife0_.ID=husband1_.WIFE   
  14.     where  
  15.         wife0_.ID=?  
  • 1
  • 2
  • 3
  • 下一页

相关内容