一、总体来分有一对一、一对多、多对一、多对多这四种关系。二、一对一关系1、单向主键
2、单向外键具体需求是Husband实体中保存Wife的引用,得到husband的实体后就可以取得wife实体。且关系是一对一。Husband实体简略信息
[java] - private int id;
- private String name;
- private int age;
- private Wife wife;
Wife实体简略信息
[java] - private int id;
- private String name;
现在使用xml构建从husband到wife的一对一关联,xml中使用的是<many-to-one>标签,理解的大概是外键一般都是保存在多这一方,站在当前实体husband的位置上考虑,即保存引用的这一方,这样就存在关联的关系,之后加上加上unique属性进行限定为一对一的关系。(多对一的特殊情况)
[html] - <hibernate-mapping>
- <class name="com.akwolf.bean.Husband" table="HUSBAND">
- <id name="id" type="int">
- <column name="ID" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="NAME" />
- </property>
- <property name="age" type="int">
- <column name="AGE" />
- </property>
- <many-to-one name="wife" class="com.akwolf.bean.Wife" fetch="join" unique="true">
- <column name="WIFE" />
- </many-to-one>
- </class>
- </hibernate-mapping>
Wife.hbm.xml简要配置。
[html] - <?xml version="1.0"?>
- <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
- "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
- <!-- Generated 2011-10-2 22:15:15 by Hibernate Tools 3.4.0.CR1 -->
- <hibernate-mapping>
- <class name="com.akwolf.bean.Wife" table="WIFE">
- <id name="id" type="int">
- <column name="ID" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="NAME" />
- </property>
- </class>
- </hibernate-mapping>
Annotation双向必设mappedBy
3、双向主键
4、双向外键
现在在wife添加一个Husband的属性使其可以找到husband,则需在Wife.hbm.xml中进行配置
[html] - <hibernate-mapping>
- <class name="com.akwolf.bean.Wife" table="WIFE">
- <id name="id" type="int">
- <column name="ID" />
- <generator class="native" />
- </id>
- <property name="name" type="java.lang.String">
- <column name="NAME" />
- </property>
- <one-to-one name="husband" property-ref="wife"></one-to-one>
- </class>
- </hibernate-mapping>
对于property-ref="wife",就是指明要进行关联的属性已经在husband的wife属性进行关联了
从wife端查询husband时,hibernate生成的查询语句
[java] - Hibernate:
- select
- wife0_.ID as ID1_1_,
- wife0_.NAME as NAME1_1_,
- husband1_.ID as ID0_0_,
- husband1_.NAME as NAME0_0_,
- husband1_.AGE as AGE0_0_,
- husband1_.WIFE as WIFE0_0_
- from
- WIFE wife0_
- left outer join
- HUSBAND husband1_
- on wife0_.ID=husband1_.WIFE
- where
- wife0_.ID=?