hibernate一对一的关系包括
单向基于外键一对一,基于主键的一对一
1.主键关联
让两个对象具有相同的主键值,以表明他们之间一一对应的关系,数据库表不会有额外的字段来维护他们之间的关系,仅仅通过两张表的相同主键来关联。
2.唯一外键关联:和多对一配置一样,只不过用了唯一的限制。
一、单向 唯一外键关联
<class name="com.softeem.pojo.Student" table="tb_student">
<id name="stuId">
<generator class="native">
</generator>
</id>
<property name="stuName" not-null="true">
</property>
<many-to-one name="cardId" unique="true" cascade="all">
</many-to-one>
</class>
二、双向 唯一外键关联
<class name="Student" table="tb_student">
<id name="stuId">
<generator class="native"></generator>
</id>
<property name="stuName"></property>
<many-to-one name="cardId" unique="true" cascade="all"></many-to-one>
</class>
<class name="Card" table="tb_card">
<id name="cardId">
<generator class="native"></generator>
</id>
<property name="cardCode"></property>
<!--对方表产生依赖于cardId的外键-->
<one-to-one name="student" property-ref="cardId"></one-to-one>
</class>
三、单向 主键关联
基于主键关联的持久化类不能拥有自己的主键生成器策略,它的主键有关联实体来负责生成
采用基于主键的1 - 1关联时,使用<one-to-one.../>元素来影射关联实体,配置<one-to-one.../>元素时,需指定一个name属性,其值为关联实体属性的属性名。
<class name="Student" table="tb_student">
<id name="stuId">
<generator class="foreign"><!-- 基于主键关联时,主键生成的策略是foreign,表明根据关联类的主键来生成该实体的主键 -->
<param name="property">card</param>
</generator>
</id>
<property name="stuName"></property>
<!-- 自己的表中产生外键,其值为本类中card属性,和基于外键的一对一相反 -->
<one-to-one name="card" constrained="true">
</one-to-one>
</class>
<class name="com.softeem.pojo.Card" table="tb_card">
<id name="cardId">
<generator class="native">
</generator>
</id>
<property name="cardCode"></property>
</class>
public class Card {
private int cardId;
private String cardCode;
...
get,set方法
...
}
public class Student {
private int stuId;
private String stuName;
//只做为stuId的参考,不能生成外键
private Card cardId;
...
get,set方法
...
}