Hibernate(七)双向一对多

作者: leeqico | 来源:发表于2018-06-24 15:07 被阅读5次

一、概述

双向 1-n 与 双向 n-1 是完全相同的两种情形

双向 1-n 需要在 1 的一端可以访问 n 的一端, 反之依然.

域模型:从 Order 到 Customer 的多对一双向关联需要在Order 类中定义一个 Customer 属性,而在 Customer 类中需定义存放 Order 对象的集合属性。

关系数据模型:ORDERS 表中的 CUSTOMER_ID 参照 CUSTOMER 表的主键

当 Session 从数据库中加载 Java 集合时, 创建的是 Hibernate 内置集合类的实例, 因此在持久化类中定义集合属性时必须把属性声明为 Java 接口类型

Hibernate 的内置集合类具有集合代理功能, 支持延迟检索策略

事实上, Hibernate 的内置集合类封装了 JDK 中的集合类, 这使得 Hibernate 能够对缓存中的集合对象进行脏检查, 按照集合对象的状态来同步更新数据库。

在定义集合属性时, 通常把它初始化为集合实现类的一个实例. 这样可以提高程序的健壮性, 避免应用程序访问取值为 null 的集合的方法抛出 NullPointerException

二、案例

(1)跟上一个差不多,只增加了一个 集合属性

(2)Customer.hbm.xml

(3)新增方法1

(4)新增方法2,因为 1 的一端和 n 的一端都需要维护,所以多出了update

(5)可以在 1 的一端set节点指定inverse=true,来使 1 的一端放弃维护关系!

建议设定set的inverse=true,建议先插入 1 的一端,后插入多的一端,好处是不会对出update语句

(6)返回的多的一端的集合时Hibernate内置的集合对象,该类型具有延迟加载和存放代理对象的功能。

(7)update,无规则的

三、 <set>元素的 inverse 属性

在hibernate中通过对 inverse 属性的来决定是由双向关联的哪一方来维护表和表之间的关系. inverse = false 的为主动方,inverse = true 的为被动方, 由主动方负责维护关联关系

在没有设置 inverse=true 的情况下,父子两边都维护父子关系

在 1-n 关系中,将 n 方设为主控方将有助于性能改善(如果要国家元首记住全国人民的名字,不是太可能,但要让全国人民知道国家元首,就容易的多)

在 1-N 关系中,若将 1 方设为主控方:

①、会额外多出 update 语句。

②、插入数据时无法同时插入外键列,因而无法为外键列添加非空

四、<set>元素的cascade 属性

在对象 – 关系映射文件中, 用于映射持久化类之间关联关系的元素,<set>,<many-to-one>和<one-to-one>都有一个 cascade 属性, 它用于指定如何操纵与当前对象关联的其他对象.

目前的数据库是这样的

如果删除某个已经有订单的客户,会抛出异常

设定级联操作

再执行删除操作,就可以把该客户以及关联的订单同时删了

删除所有和当前对象关联的对象

save-update级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对:

五、<set>元素的 order-by 属性

<set>元素有一个 order-by 属性, 如果设置了该属性, 当 Hibernate 通过 select 语句到数据库中检索集合对象时, 利用 order by 子句进行排序,order-by 属性中还可以加入 SQL 函数

开发时不建议设定级联操作属性,建议使用手工的方式来处理

相关文章

  • Hibernate(七)双向一对多

    一、概述 双向 1-n 与 双向 n-1 是完全相同的两种情形 双向 1-n 需要在 1 的一端可以访问 n 的一...

  • 多对多

    一、单向和双向 包括一对一,一对多,多对多这三种情况,但是每一种又分为单向和双向,在hibernate中我们就详细...

  • 2017.01.10

    hibernate一对多映射是什么?_? 一对多双向总结如下: 在一一端的集合上使用,在对方表中加入一个外键指向一...

  • hibernate双向关联(一对多,多对一)

    hibernate默认配置双向关联时,删除一这边的时候,不会删除多那边,而是把多的那边的关联字段设置为null,刚...

  • 简单Java类之 一对多、 双向一对多、多对多

    一对多 双向一对多 多对多

  • hibernate随笔

    两张表的单向多对一和单向一对多集合起来形成两张表的双向映射。 hibernate的数据操作基本分为两步:1.编写配...

  • hibernate 一对多

    1.0 最基本的双向一对多 1.1 添加 1.2 修改 1.3 删除 执行后报错,这里原因是child那里我们设置...

  • 关系的种类对于性能的影响

    一对多单向只有一个查询: 一对一双向同样只有一个查询: 多对一(维表为多端)双向,4个查询: 多对多双向,5个查询...

  • Hibernate 一对多操作

    一 表与表之间关系回顾 一对多 多对多 一对一 二 hibernate一对多操作1 一对多映射配置以客户联系人为列...

  • hibernate多对多映射之增删改查

    本文是hibernate多对多双向映射的增删改查实践总结笔记,全部基于注解。文中的多对多关系指的是老师有多个学生,...

网友评论

    本文标题:Hibernate(七)双向一对多

    本文链接:https://www.haomeiwen.com/subject/zqvmeftx.html