首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate之一对一投射关系小结

2012-11-20 
Hibernate之一对一映射关系小结?一对一关系的实现,其建表策略有两种:1、唯一外键,是指一方引用另一方的主键

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属性类型所对应的关联表的主键

?

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

?

热点排行