在一对多的设置上delete-orphan多见,但在many-to-one上,其依然好用。例如我们常用many-to-one来代替one-to-one,这样有时就要求根据把父对象的(many-to-one)属性设置为null是,直接把其属性对应的表子记录也要删除。
例如:用户信息对象、用户附属信息对象。两个对象是一对一的(附属对象上用户对象上的一个属性),在hibernate配置上用many-to-one来代替,这样如果设置“附属信息”属性的cascade='delete-orphan'。
java代码:
this.用户信息dao.lock(用户信息对象).
用户信息对象.set附属信息(null);
则会生成两个sql.
1.update 用户信息对象 set 附属信息=null where id=用户信息id.
2.delete from 附属信息 where 附属信息.id=原关联在用户信息对象的附属信息id.
一对多配置,但执行删除的时候,还是一条一条删。
jczjyyhxx.getJcsbs().clear();
for (Jcsb jcsb : jczjyxxForm.getJcsbs()) {
jcsb.setJcsbxh(null);// 注意hashcode
jczjyyhxx.addJcsb(jcsb);
}
<set name="jcsbs" inverse="true" cascade="all-delete-orphan">
<key column="fk_jczjyxxxh" />
<one-to-many class="Jcsb" />
</set>
分享到:
相关推荐
- 如果希望在解除关系的同时删除子实体,则需要显式地设置`cascade`属性为`all-delete-orphan`,并添加相应的配置: ```xml <set name="orders" cascade="all-delete-orphan" inverse="true"> <one-to-many ...
6. **all-delete-orphan**:这个级联选项结合了 all 和 delete-orphan 的行为。它不仅会在所有情况下执行级联操作,还会在解除关联时删除孤儿对象。 #### 三、示例代码 以下是一个使用级联的例子: ```xml ...
- `cascade="all-delete-orphan"`:结合`all`和`delete-orphan`特性,当从集合中移除对象时,会立即从数据库中删除该对象。 ### 三、持久化对象状态管理 #### 持久对象状态分类 - **Transient临时态**:仅存在于...
- **Cascade Delete-Orphan**: 删除孤儿实体(即不再被引用的实体)。 - **Cascade None**: 不执行任何级联操作。 #### Hibernate与SQL语句的交互 Hibernate提供了一种高级的ORM映射方式,允许开发者用面向对象的...
级联操作的设置方式有多种,对于一对一和多对一的关系,可以通过`cascade="delete"`或`cascade="all"`,而对于一对多的关系,可以选择`cascade="all-delete-orphan"`或`cascade="all"`。`delete`只在删除父对象时...
`cascade`有多种类型,包括`save-update`、`merge`、`delete`、`all`、`all-delete-orphan`等,每种类型代表不同的操作传播策略。 1. `save-update`:当你保存或更新父实体时,也会同时保存或更新所有关联的子实体...
例如,如果`Teacher`和`Student`的关系设置了`cascade="all-delete-orphan"`,当一个`Student`从`Teacher`的`items`集合中移除时,Hibernate会在数据库中相应地删除这个`Student`。 **2. Hibernate Inverse** `...
- `<set name="items"cascade="all-delete-orphan" inverse="true">` 描述了`Order`类中名为`items`的集合属性与数据库表的关系。`cascade="all-delete-orphan"`表示当父对象被删除时,所有孤儿子对象也将被删除。`...
这里`cascade="all-delete-orphan"`表示级联所有操作,包括删除孤儿(即当一个班级被删除时,其关联的学生也将被删除)。 四、总结 通过本教程,你可以了解到如何在Hibernate中配置和操作一对多关系,理解XML映射...
- **原因分析**:当使用了`cascade="all-delete-orphan"`时,集合中的对象在删除时会被级联删除,但不允许直接替换集合。 - **解决方案**: - 移除集合中不需要的对象,而不是替换整个集合。 - 如果确实需要替换...
5. `all-delete-orphan`:除了执行`all`操作外,还会删除那些在父实体中被“遗弃”的子实体。这意味着如果一个子实体在父实体的集合中被移除,那么它也会被删除。 6. `merge`:这个值表示在调用`merge()`方法时,...
5. **all-delete-orphan**:除了`all`包含的操作外,还会删除被父对象“遗弃”的子对象(即从父对象的集合中移除但未被显式删除的子对象)。 例如,在部门和员工的例子中,如果希望当部门被删除时,其关联的所有...
<one-to-many name="children" cascade="all,delete-orphan" /> ``` 或 ```java @OneToMany(cascade = { CascadeType.ALL }) ``` 二、Hibernate反转(Inverse) 反转主要用来解决关联关系的维护问题。在一对多...
- `all-delete-orphan`:除了 `all` 操作外,还会删除与父对象失去关联的子对象。 例如,假设有一个 `Course` 类关联着多个 `Student` 类,如果在 `Course` 上设置了 `cascade="save-update"`,那么当保存或更新 `...
在这个例子中,`<set>`元素表示一个集合关联,`inverse="true"`表示"多方"维护关联关系,`cascade="all-delete-orphan"`表示级联操作,删除父项时会删除所有子项。 在实际操作中,我们可以通过Hibernate的Session...
* org.springframework.orm.hibernate3.HibernateSystemException: Don't change the reference to a collection with cascade="all-delete-orphan" + 解决方案:不要在实体类中修改带有 cascade="all-delete-...
<many-to-one name="childEntity" class="com.example.ChildEntity" cascade="all,delete-orphan" /> ``` 在这个例子中,父实体的`childEntity`属性将执行全部级联操作,包括添加、删除和更新,同时`delete-orphan`...
many-to-one:标签中对于cascade的取值delete,delete-orphan,all-delete-orphan(只用unique属性值不为true不能出现)慎用 cascade:级联属性 none:不做任何级联操作 save-update:对当前对象执行save,update, ...