Hibernate:one-to-one(一对一)关联映射详解

什么是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属性的类型所对应的表)。

说明:

  1. 采用foreign主键生成策略:保证持久态对象是一一对应的;
  2. 将主键设置成外键:保证两个关联的表中的两条记录是一一对应的

one-to-one的应用

我们将使用junit和debug追踪对one-to-one进行探讨。

使用一对一关联进行表的创建和使用

首先进行创建表:

在这里插入图片描述
通过观察Hibernate发送的sql语句,我们发现t_person表中并没有idCard属性对应的字段,而是将主键id设置成了外键,参照t_idcard表的主键id。

插入数据

创建idCard对象,调用save方法:

在这里插入图片描述
查看执行日志:

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值