从对象端:
<class name="IDCard">
<id name="id" column="personId">
<generator class="foreign">
<param name="property">person</param>
</generator>
</id>
<property name="numberStr"></property>
<!--基于主键的一对一关联映射-->
<one-to-one name="person"
constrained="true" class="Person"/>
</class>
主对象端:
<class name="Person">
<id name="id">
<generator class="identity"></generator>
</id>
<property name="name" not-null="true"/>
<!-- 基于主键的一对一关联映射-->
<one-to-one name="idCard" class="IDCard"></one-to-one>
</class>
测试代码:
@Test
public void testSave() {
Person p = new Person();
IDCard idCard = new IDCard();
idCard.setNumberStr("430626199106211031");
p.setName("曾险峰");
p.setIdCard(idCard);
idCard.setPerson(p);
Session session = null;
try {
session = HibernateUtil.getSession();
session.beginTransaction();
session.save(idCard);
//session.save(p);
session.getTransaction().commit();
} catch (HibernateException e) {
session.getTransaction().rollback();
e.printStackTrace();
} finally {
if(null != session) {
session.close();
}
}
}
假如按上面的方式save,由于从对象端会默认级联修改和插入,所以即使没有设置cascade和save主对象,数据库中还是会插入主对象的记录,如果这个从对象没有指定它的主对象,则插入会报错,如果只save主对象,则不会级联插入从对象,只有设置了cascade属性才能级联。