一、基于外键映射的 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 策略,表明根据”对方”的主键来生成自己的主键,自己并不能独立生成主键,<param>子元素指定使用当前持久化类的哪个属性作为 “对方”。
采用foreign主键生成器策略的一端增加 one-to-one 元素映射关联属性,其one-to-one属性还应增加 constrained=“true” 属性;另一端增加one-to-one元素映射关联属性。
constrained(约束):指定为当前持久化类对应的数据库表的主键添加一个外键约束,引用被关联的对象(“对方”)所对应的数据库表主键。
四、案例
(1)实体跟上一个案例一样
(2)对象关系映射文件如下
(3)指定关联的映射文件
(4)不管先保存哪个对象,最后执行的sql都是先插入没有外键约束的对象
(5)department表有个外键约束
(6)查询,这里的是正确的