摘自 孙卫琴 精通Hibernate P159
当关联双方存在父子关系,就可以在 set 处设定 cascade 为 all-delete-orphan
所谓父子关系,即指由父方控制子方的持久化圣明周期,子方对象必须和一个父方对象关联。如果删除父方对象,应该级联删除所有关联的子方对象;如果一个子方对象不再和一个父方对象关联,应该把这个子方对象删除。
all-deleteorphan 的能力:
1. 当保存或更新父方对象时,级联保存或更新所有关联的子方对象,相当于 cascade 为 save-update
2. 当删除父方对象时,级联删除所有关联的子方对象,相当于 cascade 为 delete
3. 删除不再和父方对象关联的所有子方对象
解除父子关系的 java 语句例如:
customer.getOrders().remove(order);
order.setCustomer(null);
tx.commit();
如果 cascade 属性取默认值 null,当解除父子关系时,会执行如下 sql:
update ORDER set CUSTOMER_ID=null where ID=2
inverse 设定的原则:
1. 在映射一对多双向关联关系时,应该设定 many 方的 inverse 为 true,以提高性能
2. 在建立两个对象的双向关联时,应同时修改关联两端的对象的相应属性:
1)customer.getOrders().add(order);
2)order.setCustomer(customer);
如果不执行 1)而仅执行 2),由于 set 元素的 inverse 为 true,因此 hibernate 不会按照 CUSTOMER 对象的状态变化来同步数据库。
inverse 解决性能问题的例子:
1. 建立 Order 到 Customer 的多对一关联关系
order.setCustomer(customer);
相应执行的 SQL 为:
update ORDERS set ORDER_NUMBER=Jack_Order001, CUSTOMER_ID=2 where ID=2;
2. 建立 Customer 到 Order 的一对多关系
customer ORDERS set CUSTOMER_ID=2 where ID=2;
相应 SQL 为:
update ORDERS set CUSTOMER_ID=2 where ID=2;
显然 1 和 2 的 SQL 功能重复了,反复执行这样的 SQL 语句会引起性能下降,因此:
inverse 设定为 true 时,声明 Customer 端的关联只是 Order 端关联的镜像。当两者状态发生变化时,Hibernate 仅按照 Order 对象状态变化来同步数据库。即仅会执行以下 SQL:
update ORDERS set ORDER_NUMBER=Jack_Order001, CUSTOME_ID=2 where ID=2;
Customer.hbm.xml 片段如下:
<set
name="orders"
cascade="all-delete-orphan"
inverse="true"
>
<key column="CUSTOMER_ID" />
<one-to-many class="mypack.Order" />
</set>
相关推荐
### Hibernate级联(Cascade)详解 #### 一、概述 Hibernate 是一款强大的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象模型映射到数据库表,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...
在Java的持久化框架Hibernate中,`cascade`是一个非常重要的概念,它涉及到对象关系映射(ORM)中的数据操作传播性。本测试Demo主要目的是帮助我们理解如何在Hibernate中使用`cascade`属性来处理关联对象的数据操作...
《Hibernate Cascade在不同关联关系中的具体表现》 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,极大地简化了数据库操作。其中,Cascade属性是Hibernate提供的一种强大的功能,它允许我们在操作一...
### Hibernate中的Cascade选项详解 #### 一、概述 在Hibernate框架中,cascade选项提供了一种管理实体间关联的便捷方式,使得对一个实体的操作能够自动地应用到与之相关的其他实体上。这对于处理复杂的数据库关系...
详解Hibernate cascade级联属性的CascadeType的用法 cascade(级联) 级联在编写触发器时经常用到,触发器的作用是当 主控表信息改变时,用来保证其关联表中数据同步更新。若对触发器来修改或删除关联表相记录,必须...
在Hibernate中,`cascade`和`inverse`是两个重要的概念,它们涉及到对象之间的关系管理和数据持久化。 **1. Hibernate Cascade** `cascade`属性主要用于控制对象间的级联操作。当在主对象上执行保存、更新、删除等...
根据提供的文件信息,我们可以深入探讨Hibernate框架中的几个关键概念,特别是`fetch`, `lazy`, `cascade`, 和 `inverse`关键字的使用与理解。这四个概念在处理对象关系映射(ORM)时非常重要,尤其是在Java环境下...
在这个"Hibernate Cascade"示例中,我们可能会看到如何配置这种关系,并且通过级联操作来管理这些关联对象的生命周期。 级联操作(Cascade)是Hibernate的一个特性,它允许我们将一个实体的操作(如保存、更新、...
Hibernate中cascade与inverse属性详解
在Java的持久化框架Hibernate中,级联操作(Cascade)和反转(Inverse)是两个重要的概念,它们主要用于管理对象关系模型中的关联关系。在一对多的关系中,这些特性可以帮助简化数据操作,提高代码的可读性和维护性...
### Hibernate Inverse 和 Cascade 的详细讲解 #### 一、引言 在ORM(Object-Relational Mapping)领域,Hibernate作为一款流行的Java持久层框架,它提供了丰富的API和配置选项来帮助开发者实现对象与数据库表之间...
在 Hibernate 框架中,`cascade` 和 `inverse` 是两个重要的概念,它们主要用于管理对象之间的持久化关系,特别是涉及到一对一(one-to-one)、一对多(one-to-many)和多对多(many-to-many)关系时。这两个属性都...
### Hibernate Many-to-One (多对一) 及 Cascade (级联) #### 一、Many-to-One(多对一) 在数据库设计中,实体之间的关系主要包括一对一、一对多、多对多等几种类型。而在ORM(对象关系映射)框架Hibernate中,...
#### Hibernate cascade取值详解 - **Cascade Save-Update**: 当父对象被保存或更新时,其关联的所有子对象也将被保存或更新。 - **Cascade Delete**: 删除父对象时,所有关联的子对象也将被删除。 - **Cascade All-...
java,hibernate cascade设置,Oracle,jsp,Struts2 + jQuery 实现ajax,weblogic 自动部署 ,设计模式,js打印方法,搭建SVN服务端,jdk6+tomcat6+mysql5安装程序的制作,dwr备忘
在探讨Hibernate框架中的级联操作(cascade)与控制权反转(inverse)之前,我们需要先对Hibernate有一个基本的理解。Hibernate是一个开放源代码的对象关系映射(ORM)框架,它为Java应用提供了一种将对象模型映射到...
Hibernate中的Cascade属性指定了对持久化实体操作时,关联实体的级联操作类型。文档中提到的CascadeType.PERSIST表示对持久化操作的级联,CascadeType.MERGE表示对合并操作的级联。这些设置用于定义一个实体被保存或...