一对一关联映射
什么是one-to-one?
概念
一对一关联,一个对象通过关联属性只能对应一个对象。
在数据库中表现为:一张表中的记录通过外键字段与另一张表建立关联关系,外键作为另一张表对应记录的主键,且每条记录具有不同的外键,来对应另一张表中的记录。
举例:
每一个公民都有对应的身份证,且每个公民对象都有一一对应的身份证号。公民和身份证号这两个对象之间就存在一对一关系。
建立模型
使用并配置one-to-one
在hbm.xml映射文件中配置一对一关联映射
我们首先配置idCard表的映射:
将表名配置为t_idcard,主键的生成策略为native(数据库生成)。
紧接着我们配置User表:
- 表名配置为t_person。
- 主键的配置:主键生成策略为foreign(说明主键的值来自于外部),参数param的name=property,参数的值为idCard(说明来自于当前类的一个名为idCard的属性所指的对象的id中拿到主标识,从而生成当前对象的主标识)。
- idCard属性配置 :idCard是关联属性,作为外键关联idCard类所对应的表。使用one-to-one标签,为了维护参照完整性,设置关键字constrained=true(指定当前表的主键又作为外键,参照idCard属性的类型所对应的表)。
说明:
- 采用foreign主键生成策略:保证持久态对象是一一对应的;
- 将主键设置成外键:保证两个关联的表中的两条记录是一一对应的
one-to-one的应用
我们将使用junit和debug追踪对one-to-one进行探讨。
使用一对一关联进行表的创建和使用
首先进行创建表:
通过观察Hibernate发送的sql语句,我们发现t_person表中并没有idCard属性对应的字段,而是将主键id设置成了外键,参照t_idcard表的主键id。
插入数据
创建idCard对象,调用save方法:
查看执行日志: