Hibernate之一对一映射关系小结
?
一对一关系的实现,其建表策略有两种:
1、唯一外键,是指一方引用另一方的主键,作为外键,并且对引用的外键加唯一约束。
2、共享主键,是指一方引用另一方的主键,作为自身的主键,也是外键。
?
一、通过实例说明唯一外键的方式映射双向一对一关系
Account和Address是一对一关系,有以下属性:
**Account: Address addr;
**Address:Account acct;
?
?
在映射文件Account.hbm.xml中,关系属性addr配置如下:
?
<one-to-one name="addr" cascade="all" property-ref="addr"/>
?
**?property-ref表示外键所在的表对应的对象
在映射文件Address.hbm.xml中,关系属性acct配置如下:
<many-to-one name="acct" column="fid" unique="true" cascade="all"/>
?
?**many-to-one 表示"关联属性"acct体现的是一对多(因为数据库中外键字段代表多),但是实际上acct代表一对一,因此添加unique="true"?的额外约束
**fid 代表表中的外键字段
**unique="true" 代表外键的唯一性
**cascade="all" 代表对任意数据库操作都执行"级联操作"
二、通过实例说明主键共享的方式实现双向一对一映射
?
同是以Account和Address一对一关系为例,有以下属性:
**Account: Address addr;
**Address:Account acct;
在映射文件Account.hbm.xml中,关系属性addr配置如下:
?
<one-to-one name="addr" cascade="all" />
在映射文件Address.hbm.xml中,关系属性acct主要配置如下:
?
?
<id name="oid"> <generator cascade="all" constrained="true"/>?**Address的主键值由Account的主键值而来
** <generator class = "foreign">是指oid的值是由关联表的主键值而来。
**?<param name="property">acct</param>是指关联表是acct?属性的类型所对应的表
** constrained="true" 是指acct属性所在类对应表的主键对应acct属性类型所对应的关联表的主键
?
以上只是个人点滴总结,出错处请大家指出,谢谢
?