一、一对一主键关联映射——单向
一般一对一主键关联映射通过foreign主键生成器使用另外一个相关联的对象的标识符。通常和<one-to-one>联合起来使用。
领域模型图:
1.使用:
<generator class="foreign">
<param name="property">idCard</param>
</generator>
只是配置主键的生成策略,是由idCard的对象的主键提供(idCard是Person类的一个属性)
2.再配置:
<one-to-one name="idCard" constrained="true"></one-to-one>
当constrainted=“true”配上之后就在映射的那张表上添加一个外键约束,表示通过一个外键引用对Person的主键进行约束。
3.保存
session.save(person),person的主键是共享了idCard的主键,所以要先保存idCard对象,然而不需要调用save(idCard),因为一对一主键关联映射中默认了cascade属性,会自动的先保存idCard对象。所以不会抛出TransientObjectException异常。
3.删除
默认的情况下删除一个person对象的时候不会把对应的idCard对象删除,只有配置ascade的delete操作时才能级联的把相应的idcard对象删除。
4.加载
one-to-one标签默认根据主键加载。
二 、一对一主键关联映射——双向,领域模型图:
在Idcard中加入one-to-one标签
1.配置
<one-to-one name="person"/>
2.保存
还是从person端保存。
3.加载
one-to-one默认根据主键加载,可以从idCard加载。
4.删除
在one-to-one标签中配置cascade的delete操作可以将关联对象也删除