表结构
基于外键单向一对一的关联映射 其实就是多对一中的一种情况,当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>