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方法进行操作。

 

 

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值