Hibernate——一对一关联映射


背景:最近在学习Hibernante视频,内容丰富,讲解的也挺详细的,正好学习到一对一关联映射,里面的细节非常值得记录一下!


一、相关概念


两个对象之间是是一对一的关系,如Person-IdCard


有两种策略可以实现一对一的关联映射:

1、主键关联:即让两个对象具有相同的关键值,以表明它们之间的一对一对应的关系;数据库不会有额外的字段来维护它们之间的关系,仅通过表的主键来关联

2、唯一外键关联:外键关联,本来是用于多对一的配置,但是如果加上唯一的限制后,也可以用来表示一对一关联关系。


二、主键关联


1、单向关联(Person------>IdCard)


一对一关联映射原理:让两个实体的主键一样,这样就不需要加入多余的字段了。

<class name="com.bjpowernode.hibernate.Person"table="t_person">
<idname="id">
<!-- 采用foreign生成策略,forgeign会取得关联对象的标识-->
<generatorclass="foreign">
<!-- property只关联对象 -->
<paramname="property">idCard</param>
</generator>
</id>
<propertyname="name"/>
<!--one-to-one指示hibernate如何加载其关联对象,默认根据主键加载也就是拿到关系字段值,
根据对端的主键来加载关联对象constrained="true表示,当前主键(person的主键)还是一个外键
参照了对端的主键(IdCard的主键),也就是会生成外键约束语句-->
<one-to-onename="idCard" constrained="true"/>
</class>

2、双向关联(Person<----->IdCard)


需要在IdCard加入<one-to-one>标签,指示hibernate将关联对象Person根据主键加载上来;
<one-to-one>不影响存储,只影响加载。


三、唯一外键关联


1、单向关联(Person------>IdCard)


一对一唯一外键关联映射其实是多对一的特例;
采用<many-to-one>标签来映射,指定多的一端unique为true,这样就限制了多的一端的多重性为一,就是这样来映射的。


2、双向关联(Person<----->IdCard)


一对一唯一外键关联双向采用<one-to-one>标签映射,必须指定<one-to-one>标签中的property-ref属性为关系字段的名称。


四、学习心得


1、关系映射是实体类和表之间的关联,一般采用<class>标签映射。

2、如果实体类的名称或实体类中属性的名称和数据库关键字重复,将会出现问题,可以考虑采用table属性和column属性对其进行重新命名。

3、可以了解一下hibernate.cfg.xml文件中的hbm2ddl属性。








评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值