如何解决共享实体上的休眠孤儿删除
给出一个具有字符串和日期值的实体B。
B的实例在每个工作负载中创建一次,并由每个工作负载中创建的所有其他实体共享。
B bee = new B();
我们还有另一个实体类A,每个工作负载我们只创建一次,并且具有:
@OneToMany(cascade = CascadeType.ALL,orphanRemoval = true)
List<B> bees = new B();
然后我们为实体 a 添加一次a.bees.add(bee);
,并为其他实体类型 c-z 添加一次{1>。
现在,由于这只蜜蜂是共享的,所以当我删除具有此 b 的A型实体时会发生什么?
休眠状态会尝试删除B,尽管B可能会被A以外的其他实体引用?
仅在不再引用 b 时,才有办法 ORPHANDELETE /级联删除吗?
解决方法
-
orphanRemoval
或CascadeType.REMOVE
用于在子实体不再被父实体引用或删除父实体时删除子实体。在这两种情况下,您都在对检索到的父实体进行操作,因此hibernate将对子实体执行操作,因为它已经知道。 -
为实现您的目标,休眠状态需要知道还有谁对该子实体有引用。休眠无法自动完成。
-
但是,如果您的子实体引用了所有其他实体,则可以使其不再引用那些其他实体,因此将仅保留父实体作为与之关联的实体。因此,现在将其从此父级中删除时,可以通过
删除它orphanRemoval
或CascadeType.REMOVE
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。