`

hibernate 配置cascade 及all-delete-orphan

    博客分类:
  • java
 
阅读更多

cascade几种取值:

save-update:   级联保存(load以后如果子对象发生了更新,也会级联更新). 但它不会级联删除

delete:              级联删除, 但不具备级联保存和更新

all-delete-orphan: 在解除父子关系时,自动删除不属于父对象的子对象, 也支持级联删除和级联保存更新.

all:                     级联删除, 级联更新,但解除父子关系时不会自动删除子对象.

delete-orphan:删除所有和当前对象解除关联关系的对象

none:...

级联保存和级联更新总是集合在一起的, 所以没单独的save 或 update


当关联双方存在父子关系,就可以在 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

如果要把它也删掉,则设置:

<set   name="orders" cascade="all-delete-orphan" inverse="true">

<key column="CUSTOMER_ID" />

<one-to-many class="mypack.Order" />

再运行时就会执行:delete from ORDERS where CUSTOMER_ID=2 and ID=2;

分享到:
评论

相关推荐

    hibernate_配置cascade_及all-delete-orphan.doc

    - 如果希望在解除关系的同时删除子实体,则需要显式地设置`cascade`属性为`all-delete-orphan`,并添加相应的配置: ```xml &lt;set name="orders" cascade="all-delete-orphan" inverse="true"&gt; &lt;one-to-many ...

    Hibernate cascade (级联).doc

    6. **all-delete-orphan**:这个级联选项结合了 all 和 delete-orphan 的行为。它不仅会在所有情况下执行级联操作,还会在解除关联时删除孤儿对象。 #### 三、示例代码 以下是一个使用级联的例子: ```xml ...

    hibernate cascade 测试demo

    `cascade`有多种类型,包括`save-update`、`merge`、`delete`、`all`、`all-delete-orphan`等,每种类型代表不同的操作传播策略。 1. `save-update`:当你保存或更新父实体时,也会同时保存或更新所有关联的子实体...

    Hibernate中cascade和inverse应用

    - `all-delete-orphan`:除了 `all` 操作外,还会删除与父对象失去关联的子对象。 例如,假设有一个 `Course` 类关联着多个 `Student` 类,如果在 `Course` 上设置了 `cascade="save-update"`,那么当保存或更新 `...

    hibernate配置笔记

    - `&lt;set name="items"cascade="all-delete-orphan" inverse="true"&gt;` 描述了`Order`类中名为`items`的集合属性与数据库表的关系。`cascade="all-delete-orphan"`表示当父对象被删除时,所有孤儿子对象也将被删除。`...

    hibernate 学习笔记3

    - `cascade="all-delete-orphan"`:结合`all`和`delete-orphan`特性,当从集合中移除对象时,会立即从数据库中删除该对象。 ### 三、持久化对象状态管理 #### 持久对象状态分类 - **Transient临时态**:仅存在于...

    关于Hibernate级联删除的问题.doc

    级联操作的设置方式有多种,对于一对一和多对一的关系,可以通过`cascade="delete"`或`cascade="all"`,而对于一对多的关系,可以选择`cascade="all-delete-orphan"`或`cascade="all"`。`delete`只在删除父对象时...

    hibernate 级联(cascade和inverse)一对多

    &lt;one-to-many name="children" cascade="all,delete-orphan" /&gt; ``` 或 ```java @OneToMany(cascade = { CascadeType.ALL }) ``` 二、Hibernate反转(Inverse) 反转主要用来解决关联关系的维护问题。在一对多...

    hibernate之一对多配置demo

    这里`cascade="all-delete-orphan"`表示级联所有操作,包括删除孤儿(即当一个班级被删除时,其关联的学生也将被删除)。 四、总结 通过本教程,你可以了解到如何在Hibernate中配置和操作一对多关系,理解XML映射...

    Hibenate cascade

    例如,如果`Teacher`和`Student`的关系设置了`cascade="all-delete-orphan"`,当一个`Student`从`Teacher`的`items`集合中移除时,Hibernate会在数据库中相应地删除这个`Student`。 **2. Hibernate Inverse** `...

    Hibernate many-to-many

    常见的级联类型包括:SAVE_UPDATE、PERSIST、MERGE、REMOVE、ALL、ALL_DELETE_ORPHAN等。 在描述中提到了"jar包已经包含在里面了",这意味着这个压缩包可能包含了Hibernate库和其他必要的依赖,比如数据库驱动,以...

    hibernate-3.2.rar

    10. **级联操作**:通过设置`cascade`属性,可以在操作一个实体时自动处理其关联实体,如`save-update`, `delete`, `all-delete-orphan`等。 11. **延迟加载(Lazy Loading)**:Hibernate 3.2支持懒加载机制,对于...

    hibernate自身关联一对多实例(树形结构)

    在这个例子中,`&lt;set&gt;`元素表示一个集合关联,`inverse="true"`表示"多方"维护关联关系,`cascade="all-delete-orphan"`表示级联操作,删除父项时会删除所有子项。 在实际操作中,我们可以通过Hibernate的Session...

    java 资料

    - **Cascade All-Delete-Orphan**: 在删除实体关系中的对象时,也会自动删除不再被引用的对象。 - **Cascade All**: 类似于Save-Update和Delete的组合,执行所有级联操作。 - **Cascade Delete-Orphan**: 删除孤儿...

    hibernate 课件

    - `cascade="all-delete-orphan"`: 指示Hibernate在删除`User`实体时,也会删除所有与之关联的`Account`实体。 ##### 一对一映射关系示例 **Account和Address之间的一对一映射关系** - **概念**: 一个`Account`...

    cascade用法

    5. `all-delete-orphan`:除了执行`all`操作外,还会删除那些在父实体中被“遗弃”的子实体。这意味着如果一个子实体在父实体的集合中被移除,那么它也会被删除。 6. `merge`:这个值表示在调用`merge()`方法时,...

    java 遇到的各种异常

    `org.springframework.orm.hibernate3.HibernateSystemException`: Don't change the reference to a collection with cascade="all-delete-orphan"** - **异常描述**:试图更改具有`cascade="all-delete-orphan"`...

Global site tag (gtag.js) - Google Analytics