`
jinglingwyp
  • 浏览: 2384 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate-级联cascade="all-delete-orphan"

阅读更多

关于cascade="all-delete-orphan"

 

通俗来讲就是级联删除,当一对多的情况下,父节点删除子节点相应删除操作。其他类似更新操作也受此影响,因为此对象如果已经持久化在缓存中,对其进行操作就需要考虑其持久化一致性问题。

 

 

以下为个人对持久对象进行拷贝所遇到的问题以及过程:

 

1. 当首先对其对象进行拷贝时,考虑到hibernate的特性,将PK 置为空,然后进行saveOrUpdate操作,但其出现异常:

Don't change the reference to a collection with cascade="all-delete-orphan" 

不能对其集合进行操作,在级联删除的情况下,原因为:如果对象已经存在于该持久化中,其中的关联SET也在持久化中,对其父节点对象更改PK后,子节点的由于找不到该对象并且原持久内容与之不符合。

 

解决方案:由于持久化中每个对象有相应的ID进行标识,并且对象均属于引用类型,所以若要拷贝对象并且用于插入数据库操作,建议使用对象克隆的方式,若有set类型的子节点,建议首先将其置空,之后使用ArraySet继续添加"克隆"的子节点对象,对于插入数据库就将其PK置空,添加父节点为克隆后的对象,即可使用saveOrUpdate方法进行操作。

 

 

以上为个人愚见,如有差错望予以了解并更正。

分享到:
评论

相关推荐

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

    3. **all-delete-orphan**: 这是最强大的cascade选项之一,它结合了`save-update`和`delete`的特点,并增加了一个额外的功能——当子实体与父实体之间的关联被解除时,会自动删除那些不再属于任何父实体的子实体。...

    Hibernate的级联操作(增,删,该)

    1. 级联添加(Cascade Type.ALL或Cascade Type.PERSIST) 当设置为`CascadeType.ALL`或`CascadeType.PERSIST`时,如果在父实体中创建了一个新的子实体,并且这个子实体还没有被持久化到数据库,那么在保存父实体时,...

    hibernate 级联(cascade和inverse)一对多

    一、Hibernate级联(Cascade) 级联操作允许我们将对一个实体的更改自动应用到与之关联的其他实体。在一对多关系中,如果一个实体(父实体)与多个实体(子实体)关联,设置级联属性可以确保在处理父实体时,子实体...

    Hibernate cascade (级联).doc

    ### Hibernate级联(Cascade)详解 #### 一、概述 Hibernate 是一款强大的对象关系映射 (ORM) 框架,它允许开发人员将 Java 对象模型映射到数据库表,从而极大地简化了数据访问层的开发工作。在 Hibernate 中,...

    hibernate 学习笔记3

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

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

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

    hibernate-3.2.rar

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

    Nhibernate 隐射实例

    <bag name="Employees" inverse="true" cascade="all-delete-orphan"> <key column="DepartmentId"/> <one-to-many class="Employee"/> <class name="Employee" table="Employees"> ... <many-to-one ...

    Hibernate一对多单向关联(annotation/xml)

    <set name="orders" inverse="true" cascade="all-delete-orphan"> <key column="user_id"/> <one-to-many class="com.example.Order"/> </hibernate-mapping> ``` 2. **在子类的映射文件中**,使用`<many-...

    hibernate 课件

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

    Hibernate中cascade和inverse应用

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

    hibernate之一对多配置demo

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

    Hibernate1对N案例笔记

    <set name="employees" table="Employee" inverse="true" cascade="all-delete-orphan"> <key column="deptno"/> <one-to-many class="com.example.Employee"/> ``` 这样,当删除部门时,所有关联的员工也会被...

    Hibernate many-to-many

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

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

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

    Hibenate cascade

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

    Hibernate映射一对多关联关系

    <set name="orders" inverse="true" cascade="all-delete-orphan" lazy="false"> <key column="CUSTOMER_ID"/> <one-to-many class="mypack.Order"/> ``` 在上面的映射文件中: - `<set>` 元素用于表示一对多...

    hibernate3学习总结

    - 级联操作(Cascade):控制关联对象的保存、更新、删除行为,如 none、save-update、delete 和 all-delete-orphan。 - `inverse` 属性:用于双向关联中,控制哪一侧负责维护关系,以避免数据同步问题。 在实际...

Global site tag (gtag.js) - Google Analytics