表结构
基于外键单向一对一的关联映射
其实就是多对一中的一种情况,当unique设置为true时候可以设置一对一的关系,即设置外键值唯一
Person和IdCard类
public class Person {
private int id;
private String name;
private int age;
private IdCard idCard;
//get…set
}
public class IdCard{
private int id;
private String code;
//get…set
}
IdCard.hbm.xml
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="code"/>
</class>
</hibernate-mapping>
person.hbm.xml(重点来了)
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id">
<generator class="native"></generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- 当unique设置为true时候可以设置一对一的关系 -->
<many-to-one name="idCard" class="IdCard" cascade="save-update" column="idCard_Id"
foreign-key="fk_idCard" not-null="true" unique="true">
</many-to-one>
</class>
</hibernate-mapping>
测试(session对象的获取封装在HibernateUtil里面)
session = HibernateUtil.getSession();
tx = session.beginTransaction();
IdCard id1 = new IdCard();
id1.setCode("320123231212112");
IdCard id2 = new IdCard();
id2.setCode("110231432423432");
Person person1 = new Person();
person1.setName("贾宝玉");
person1.setAge(23);
person1.setIdCard(id1);
Person person2 = new Person();
person2.setName("林黛玉");
person2.setAge(22);
person2.setIdCard(id2);
Person person3 = new Person();
person3.setName("薛宝钗");
person3.setAge(21);
person3.setIdCard(id2);
session.save(person1);
session.save(person2);
//当保存person3出错
//session.save(person3);
tx.commit();
基于主键单向一对一的关联映射
其实就是Person的主键生成策略变了。
表结构
Person和IdCard类
public class Person {
private int id;
private String name;
private int age;
private IdCard idCard;
//get…set
}
public class IdCard{
private int id;
private String code;
//get…set
}
IdCard.hbm.xml
<hibernate-mapping package="cn.siggy.pojo">
<class name="Grade">
<id name="id">
<generator class="native"></generator>
</id>
<property name="code"/>
</class>
</hibernate-mapping>
person.hbm.xml (重点来了)
<hibernate-mapping package="cn.siggy.pojo">
<class name="Person">
<id name="id">
<!-- foreign表示引用外键 -->
<generator class="foreign">
<!-- 引用idCard属性所对应的主键 -->
<param name="property">idCard</param>
</generator>
</id>
<property name="name"/>
<property name="age"/>
<!-- 一对一 -->
<one-to-one name="idCard" constrained="true" cascade="save-update"/>
</class>
</hibernate-mapping>