在Hibernate的一对多中,删除主记录的时候需要级联删除子记录,此时会在一的一方设置cascade='all,delete-orphan',
但是下面这段代码将不会删除子记录,只会把外间设置为null:
UserInfo userInfo = new UserInfo();
userInfo.setId(1);
Email email = new Email();
email.setAccount("test@test.com");
userInfo.getEmails().add(email);
session.update(userInfo);
需要先把UserInfo关联的所有Email对象获取出来,并设置为删除标识(从集合中删除Email对象,Hibernate在提交事务
时即会判断需要删除的记录)
UserInfo userInfo = (UserInfo)session.get(UserInfo.class, 1);
userInfo.getEmails().clear();
Email email = new Email();
email.setAccount("test@test.com");
userInfo.getEmails().add(email);
session.update(userInfo);
上面这段代码在更新时会删除UserInfo已置为删除标识的Email记录。
分享到:
相关推荐
3. **all-delete-orphan**: 这是最强大的cascade选项之一,它结合了`save-update`和`delete`的特点,并增加了一个额外的功能——当子实体与父实体之间的关联被解除时,会自动删除那些不再属于任何父实体的子实体。...
常见的级联类型包括:SAVE_UPDATE、PERSIST、MERGE、REMOVE、ALL、ALL_DELETE_ORPHAN等。 在描述中提到了"jar包已经包含在里面了",这意味着这个压缩包可能包含了Hibernate库和其他必要的依赖,比如数据库驱动,以...
10. **级联操作**:通过设置`cascade`属性,可以在操作一个实体时自动处理其关联实体,如`save-update`, `delete`, `all-delete-orphan`等。 11. **延迟加载(Lazy Loading)**:Hibernate 3.2支持懒加载机制,对于...
- `cascade="all-delete-orphan"`:结合`all`和`delete-orphan`特性,当从集合中移除对象时,会立即从数据库中删除该对象。 ### 三、持久化对象状态管理 #### 持久对象状态分类 - **Transient临时态**:仅存在于...
6. **all-delete-orphan**:这个级联选项结合了 all 和 delete-orphan 的行为。它不仅会在所有情况下执行级联操作,还会在解除关联时删除孤儿对象。 #### 三、示例代码 以下是一个使用级联的例子: ```xml ...
级联操作的设置方式有多种,对于一对一和多对一的关系,可以通过`cascade="delete"`或`cascade="all"`,而对于一对多的关系,可以选择`cascade="all-delete-orphan"`或`cascade="all"`。`delete`只在删除父对象时...
- `<set name="items"cascade="all-delete-orphan" inverse="true">` 描述了`Order`类中名为`items`的集合属性与数据库表的关系。`cascade="all-delete-orphan"`表示当父对象被删除时,所有孤儿子对象也将被删除。`...
`cascade`有多种类型,包括`save-update`、`merge`、`delete`、`all`、`all-delete-orphan`等,每种类型代表不同的操作传播策略。 1. `save-update`:当你保存或更新父实体时,也会同时保存或更新所有关联的子实体...
这里`cascade="all-delete-orphan"`表示级联所有操作,包括删除孤儿(即当一个班级被删除时,其关联的学生也将被删除)。 四、总结 通过本教程,你可以了解到如何在Hibernate中配置和操作一对多关系,理解XML映射...
在这个例子中,父实体的`childEntity`属性将执行全部级联操作,包括添加、删除和更新,同时`delete-orphan`意味着如果从父实体的集合中移除了子实体,那么这个子实体也将被从数据库中删除。 6. 性能与最佳实践 级联...
在这个例子中,`<set>`元素表示一个集合关联,`inverse="true"`表示"多方"维护关联关系,`cascade="all-delete-orphan"`表示级联操作,删除父项时会删除所有子项。 在实际操作中,我们可以通过Hibernate的Session...
- **cascade="all-delete-orphan"**: 这个属性表示级联操作,当删除父对象时,其子对象也会被删除。 - **多对多映射**: - 描述: 通过一个中间表来维护多个实体之间的关联关系。 - 建表语句示例: ```sql CREATE...
- **Cascade All-Delete-Orphan**: 在删除实体关系中的对象时,也会自动删除不再被引用的对象。 - **Cascade All**: 类似于Save-Update和Delete的组合,执行所有级联操作。 - **Cascade Delete-Orphan**: 删除孤儿...
了解各种级联类型(save-update、delete、all-delete-orphan等)及其使用场景。 10. **缓存机制**:Hibernate支持一级缓存和二级缓存,理解它们的工作原理,以及如何配置和优化缓存以提升性能。 11. **性能优化**...
<set name="employees" table="Employee" inverse="true" cascade="all-delete-orphan"> <one-to-many class="com.example.Employee"/> ``` 这样,当删除部门时,所有关联的员工也会被删除。 此外,我们还需要...
<set name="OrderLines" cascade="all-delete-orphan" > <one-to-many class="OrderLine"/> </hibernate-mapping>Analogous you can implement the mappings for the Customer entity ...
例如,如果`Teacher`和`Student`的关系设置了`cascade="all-delete-orphan"`,当一个`Student`从`Teacher`的`items`集合中移除时,Hibernate会在数据库中相应地删除这个`Student`。 **2. Hibernate Inverse** `...