Hibernate(八)映射一对一关联关系

一、基于外键映射的 1-1

(1)对于基于外键的1-1关联,其外键可以存放在任意一边,在需要存放外键一端,增加many-to-one元素。为many-to-one元素增加unique=“true” 属性来表示为1-1关联

(2)另一端需要使用one-to-one元素,该元素使用 property-ref 属性指定使用被关联实体主键以外的字段作为关联字段

二、案例

(1)创建实体对象

(2)创建映射文件


(3)在hibernate.cfg.xml文件指定关联的.hbm.xml文件

(4)生成表

(5)表的结构如下

department表

有一个外键约束和一个唯一约束的索引

外键

manager表

(6)保存操作

调换一下保存的顺序,会多出一条update的语句,原因跟之前的一样,所以还是先保存没有外键列的那个对象比较好

(7)查询操作

不使用 property-ref 属性的 sql

(8)在查询没有外键的实体对象时,使用的左外连接查询,一并查询出其关联的对象,并已经进行初始化

三、基于主键映射的 1-1

基于主键的映射策略:指一端的主键生成器使用 foreign 策略,表明根据”对方”的主键来生成自己的主键,自己并不能独立生成主键,子元素指定使用当前持久化类的哪个属性作为 “对方”。

采用foreign主键生成器策略的一端增加 one-to-one 元素映射关联属性,其one-to-one属性还应增加 constrained=“true” 属性;另一端增加one-to-one元素映射关联属性。

constrained(约束):指定为当前持久化类对应的数据库表的主键添加一个外键约束,引用被关联的对象(“对方”)所对应的数据库表主键。

四、案例

(1)实体跟上一个案例一样

(2)对象关系映射文件如下

(3)指定关联的映射文件

(4)不管先保存哪个对象,最后执行的sql都是先插入没有外键约束的对象

(5)department表有个外键约束

(6)查询,这里的是正确的

你可能感兴趣的:(Hibernate(八)映射一对一关联关系)