有两个类,Person和User,分别表示人员和用户,它们之间是一对一的关系,一个人员对应于一个用户。要求既可以通过Person找到对应的User,也可以通过User找到对应的Person。这是一种很常见的一对一双向关联。
在Hibernate中实现一对一双向关联有两种方式,一种是主键关联,即两个表共享一个主键,另一种是双向关联,即在一个表中增加一个外键字段,参照另一个表的主键。
1、一对一双向主键关联
这种方式只需要在Person和User的映射文件当中分别配置一对一标签指向对方即可
在Person.hbm.xml中:
<one-to-one name="user"/>
在User.hbm.xml中:
<one-to-one name="person"/>
这样,通过映射文件,在数据库中生成表的时候,不会增加额外的外键字段,而是两个表共享一个主键,加载的时候通过主键加载
2、一对一双向外键关联
这种方式是在一端配置多对一关联,指定外键具有唯一约束,在另一端配置一对一关联,指定加载对方的时候是通过外键加载,而不是通过主键加载
在Person.hbm.xml中:
<many-to-one name="user" unique="true"/>
在User.hbm.xml中:
<one-to-one name="person" property-ref="user"/>
这样,在数据库中生成表的时候,会在person表中增加一个名为"user"的外键字段,存储与之对应的User的id,通过Person对象加载User对象的时候,就通过这个外键字段加载,而通过User对象加载Person对象的时候,会到person表中去寻找字段"user"的值等于User对象的id的记录