Hibernate中双向一对多关联关系
前边我们讲过了单向多对一的关联关系,即在Java代码-hbm.xml配置文件-数据库表格中只是描述了一种类中多个对象可以对应一个其他类对象的关联关系。我们需要在一个类中含有另一个类的引用变量,然后在包含类的hbm.xml文件中描述这个属性变量对应的外键和另一张表格中的主键的关联关系,使用<many-to-one>来描述这种关系,然后执行程序就会在数据库中自动生成这种单向一对多的关联关系。
今天我们来讲一讲基于上面的单向多对一的关联关系来描述另外一种双向一对多的关联关系,即站在一端来看是一对多,站在多的一端来看是多对一,关系维护是双向的。
1.域模型
和单向多对一的关联关系不同的是,除了在多的一端的Java类中存在一的一端的Java类的引用变量之外,我们还需要在一的一端的Java类中添加一个多的一端的Java类型的集合属性的引用。
需要注意的是:这个集合类型的属性必须是接口类型的,因为通过Hibernate获取的集合类型的对象时Hibernate内置的对象,这个类型的对象实现了集合接口却未继承其他类型的集合实现类,所以我们在赋值的时候才可以赋的上。
2.关系数据模型
和单向多对一一样,我们将多的一端的外键指向一的一端的表格的主键。
3.hbm.xml文件
多的一端的hbm.xml文件不变,而在一的一端的hbm.xml文件中,我们需要添加一个新的节点来描述从一的一端到多的一端的一对多的关联关系。
<set name="一端包含的多端类型的集合变量名称" table="集合变量类型的对应的表格的名称">
<key column="对应的多端的外键的名称">
<one-to-many class="多端的Java类型的名称">
<set>
3.测试双向一对多的关联关系的CURD操作
① 保存:
对于这种双向的关联关系,我们需要在两个类中的hbm.xml文件中进行维护,比较消耗我们的资源,那么我们可不可以只让一个类的hbm.xml来维护这种双向的关联关系呢?当然是可以的,我们选择多的一方来维护这种双向的关联关系,所以只需要在一的一方的hbm.xml文件中的set节点中指定inverse="true"就可以将这种维护双向关联关系的责任反转给多的一方了。这样一来,在保存的时候,我们先插入一的一方的对象,再插入多的一方的对象,就只会执行两条insert语句,而不会出现update语句了。
② 查询
先查询一的一方,和单向多对一一样会出现延迟加载的情况,即只有当使用包含的多的一方的对象时才会发送SQL语句进行查询。
通过一的一方的对象获取的多的一方的集合对象,是Hibernate框架的内置的集合对象,该类型有延迟加载和存放代理对象的功能。
4.hbm.xml文件中set节点的属性
① inverse:反转维护关联关系的对象,我们一般在一的一方即不含主键的一方的hbm.xml文件的set中设置这个属性值为true,从而将这种双向的关联关系反转交给多的一方的hbm.xml文件来单独维护。
② cascade:级联属性的设置,我们一般不设置级联属性,而采取手动的方式解除关联关系再进行删除操作。cascade值取delete时,那么我们在删除一的一端时就会将关联的多的一端的数据也全部删去;cascade值取save-update时,那么我们在保存一端的对象时,也会将多的一端的对象一并保存进去。
③ order-by:指定我们在获取对象时,按照order-by当中的值来进行排序之后再获取,注意这里边的值应该是SQL语言中的列名或者SQL函数,而不应该是类中的属性名称。
Hibernate中双向一对多关联关系相关推荐
- (转)Hibernate框架基础——一对多关联关系映射
http://blog.csdn.net/yerenyuan_pku/article/details/52746413 上一篇文章Hibernate框架基础--映射集合属性详细讲解的是值类型的集合(即 ...
- Hibernate中的一对多XML映射
一对多关系指出一个实体的单个实例与另一个实体的多个实例相关联. 换句话说,一个表中的每个记录与另一个表中的多个记录相关联. 让我们看看如何通过XML映射文件在Hibernate中定义这种关系. 1.实 ...
- Hibernate中的一对多关系映射
Hibernate框架中关系映射中有:一对一.一对多和多对多,但常用的就是一对多,所以本篇博客就大体概述了一下一对多关系映射. 一对多关系: 例如:客户和订单,客户是一,订单是多 创建customer ...
- java 中映射关系_java – 在Hibernate中映射一对多的关系?
我有两个表,一个用户表和一个user_avatar表.对于每个用户,user_avatar表中有3条记录,适用于3种大小的头像(大,中,小). user_avatar表具有userId列,该列引用Us ...
- hibernate中的一对多和多对多的映射关系
一多对需要注意的问题: 多看文字部分的内容,有助于理解 多 对多需要注意的问题: 转载于:https://www.cnblogs.com/wzhBlog/archive/2013/03/13/2958 ...
- (转)Hibernate关联映射——一对多(多对一)
http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射--一对多(多对一) 我们以客户(Customer)与 ...
- Hibernate的一对多关联关系(单向和双向)
在领域模型中,类与类之间最普遍的关系就是关联关系.在 UML 中,关联是有方向的.以 Customer 和 Order 为例:一个用户能发出多个订单, 而一个订单只能属于一个客户.从 Order 到 ...
- JPA中实现双向一对多的关联关系
场景 JPA入门简介与搭建HelloWorld(附代码下载): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103473937 ...
- (八)Hibernate的一对多关联关系
一.概述 例如,以客户(Customer)和订单(Order)为例,一个客户能有多个订单,一个订单只能有一个客户. 从Customer到Order是一对多关联,在java类中的面向对象设计应该一个Cu ...
最新文章
- OpenCV —数据持久化: FileStorage类的数据存取操作与示例
- 从vuex源码分析module与namespaced
- Discuz代码研究-编码规范
- 在Eclipse中运行Nutch2.3
- 创建非矩形的Windows 窗体
- suse linux增加新磁盘分区,Virtualbox中Linux添加新磁盘并创建分区
- Outh2协议有哪四种授权模式?
- 【2020模拟考试T5】【PAT乙】1035 插入与归并 (25分) 两种排序的sort写法
- php从数据库删除数据,php怎么从数据库中删除数据
- 使用kindeditor直接粘贴本地图片或者是qq截图
- 商用字体网站,再也不用怕侵权
- os.getcwd()函数的用法
- Mysql报错 Cannot delete or update a parent row: a foreign key constraint fails
- UAP平台常见数据有效性数据校验
- 常见通信协议整理归纳
- drill apache_Apache Spark与Apache Drill
- Apache Calcite 实现方言转换
- 三星Samsung手机平板安装Google Play商店,安装谷歌服务框架,解决闪退奔溃GMS
- zabbix 报错No media defined for user.
- 中国人民公安大学(PPSUC) 网络对抗技术第一次作业
热门文章
- php中随机生成数字,php如何随机生成数字与字母的组合
- [python]飞机大战游戏(附带源程序)
- 绝地求生pubg崩溃,无法开始游戏怎么办
- TextView加横线
- js setInterval+setTimeout定时器轮询+终止轮询
- 拉姆.查兰管理实践奖2018:新经济的“瞻前顾后”
- python正则入门
- 华为p30 pro可以升级鸿蒙不,p30Pro、p30怎么升级鸿蒙系统?华为p30Pro、pro什么时候能升级鸿蒙系统?...
- 这个被移动互联网改变的时代
- 刚刚!2022中国大学工科排名出炉!