一对一映射有两种方式:主键关联和外键关联
1.主键关联即其中一个表的主键参照另外一张表的主键而建立起一对一关联关系
1.由于采用了主键关联方式,那通过主键关联的两张表,其关联记录的主键值须保持同步。这也就意味着,我们只需为一张表设定主键生成器,而另一张表的主键与之共享相同的主键值。
2.由查询语句可知主键关联使用的是左外连接,可以通过修改<one-to-one>中的fetch属性值为"select"修改成每次发送一条select语句的形式(必须将关联的两端的<one-to-one>中的fetch都设为"select"才有效)。但这会降低效率(因为需发送多条select语句)。
3.主键关联中默认使用立即加载策略,在<one-to-one>中设置lazy="proxy"是无法使用延迟加载策略的(即设置lazy属性是无效的)。
4.对于<one-to-one>中的constrained属性(关联约束)的说明:——constrained属性值默认为false,当constrained为false时,生成的两个表之间无任何参照关系,并且使用的是立即加载策略。
2.外键关联。本质上是一对多的蜕化形式。
对于外键关联的一对一关联关系,默认的加载策略是延迟加载,将其改为立即加载的方式:
——将lazy属性值改为false,如不希望user=(User)session.get(User.class, 1L);延迟加载,则需将User.hbm.xml中<many-to-one>的属性值改为false。
——将fetch属性设为"join",这比改lazy为false效率更高。
一对一单向外键关联与一对一双向外键关联在数据库的表的格式是一样的,区别在于
java程序中. 双向外键关联可通过Hibernate在两个类间互相调用彼此,而单向外键关联只能单方向调用.
共享主键方式就是限制两个数据表的主键使用相同的值,通过主键形成一对一的映射关系。
唯一外键就是一个表的外键和另一个表的唯一主键对应形成一对一映射关系,这种一对一的关系其实就是多对一的特殊情况。