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 class="foreign">
	     <param name="property">acct</param>
	   </generator>
</id>
<one-to-one name="acct" cascade="all"
                     constrained="true"/>
 **Address的主键值由Account的主键值而来

** <generator class = "foreign">是指oid的值是由关联表的主键值而来。

** <param name="property">acct</param>是指关联表是acct 属性的类型所对应的表

** constrained="true" 是指acct属性所在类对应表的主键对应acct属性类型所对应的关联表的主键

 

以上只是个人点滴总结,出错处请大家指出,谢谢

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值