Hibernate一对多单向关联和双向关联映射方法及其优缺点

一对多关联映射和多对一关联映射实现的基本原理都是一样的,既是在多的一端加入一个外键指向一的一端外键,而主要的区别就是维护端不同。
它们的区别在于维护的关系不同:

一对多关联映射是指在加载一的一端数据的同时加载多的一端的数据

多对一关联映射是指在加载多的一端数据的同时加载一的一端的数据

而单向一对多关联映射是在一的一端维护关系的,具有以下的缺点:

必须先保存多的一端后才可以保存一的一端,所以在保存多的一端时多的一端不知道一的一端是否存在相应的数据,所以只能将维护的关系字段设置为null,如果为非空则无法保存。因为是一的一端维护关系,所以在保存一的一端时,会发出多余的update语句维护多的一端的外键关系。

下面举例说明配置一对多的单向关联和双向关联的映射方法:

涉及到的一端和多端的类结构参考这篇文章:Hibernate一对多关联映射的配置及其级联删除问题

一对多双向关联映射的配置(可参考上面提供的文章):

在一的一端的集合上采用<key>标签进行映射:

<set name="quesion" inverse="true" cascade="delete">
	<key column="question_type_name"/>
	<one-to-many class="Question"/>
</set>

在多的一端加入一个外键private QuestionType questionType; 采用<many-to-one>标签进行映射:

<many-to-one name="questionType" column="question_type_name"/>

一对多双向关联映射一般让多的一端维护关系,所以需要设置inverse属性为true,表示本段不维护关系,而交给另一端维护,既是多的一端。同时也可以使用设置cascade进行级联操作,如上面一篇文章的级联删除设置:cascade=”delete”,表示删除一的一端的同时删除关联的多的一端的所有数据。

一对多单向关联映射:

一对多单向关联映射 多的一端Question不需要加入外键private QuestionType questionType; 只需要在一的一端的集合上采用<key>标签进行映射,映射代码如下:

<set name="quesion" inverse="true" cascade="delete">
	<key column="question_type_name"/>
	<one-to-many class="Question"/>
</set>
文章链接:http://blog.csdn.net/liangoo7/article/details/8070166
本文链接: http://www.itzhai.com/hibernate-one-to-many-unidirectional-and-bidirectional-association-mapping-method-and-its-advantages-and-disadvantages.html
关键字:  Hibernateone-to-many
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值