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>
除了文章中有特别说明,均为IT宅原创文章,转载请以链接形式注明出处。
本文链接:http://www.itzhai.com/hibernate-one-to-many-unidirectional-and-bidirectional-association-mapping-method-and-its-advantages-and-disadvantages.html
关键字: Hibernate, one-to-many
后续资料参考:http://blog.csdn.net/liangoo7/article/details/8070166
最新文章
- WKWebView _WebFilterIsActive returning: NO
- .Net分布式异常报警系统-服务端Service
- HDU 4858 项目管理(邻接表 暴力模拟)
- LCIS POJ 2172 Greatest Common Increasing Subsequence
- MFC子窗口和父窗口
- layer.js,,,分享一个好用的弹出层
- 转:鏖战双十一-阿里直播平台面临的技术挑战(webSocket, 敏感词过滤等很不错)
- 解读四大移动web应用开发框架真相
- Unityclient通信測试问题处理(二)
- Linux环境下添加ftp账号步骤
- Kendo UI开发教程(27): 移动应用开发简介
- shell 实现主板测试
- hdu5965扫雷 枚举+递推
- 使用Windows Service Wrapper快速创建一个Windows Service 如nginx
- iOS main.m解析
- 【Java每日一题】20170322
- 使用CocoaPods来做iOS程序的包依赖管理
- PAT 天梯赛 是否完全二叉搜索树&#160;&#160;&#160;(30分)(二叉搜索树 数组)
- 【C#】string格式的日期转为DateTime类型及时间格式化处理方法
- RxJava重温基础