【问题标题】:Hibernate all-delete-orphan on a child class with two parent classes在具有两个父类的子类上休眠所有删除孤儿
【发布时间】:2011-03-17 02:02:22
【问题描述】:
我正在研究一个问题,其中有两个“父”类 P 和 Q 将所有删除孤儿级联到“子”类 C。我在 Hibernate 中的直觉告诉这确实是个坏主意当代码删除 P 的一个实例(即 session.delete(myP); )时,我收到一条错误消息,可能证实了这一点:
"删除的对象将被级联重新保存(从关联中删除已删除的对象):[C#1]"
当 P 的实例和 Q 的实例都可以充当同一个 C 实例的父类时,任何人都可以确认为一个子类拥有两个父类是一个坏主意吗?
谢谢!
【问题讨论】:
标签:
hibernate
parent
cascade
cascading-deletes
【解决方案1】:
我的猜测是,如果您在同一事务中同时拥有 P 和 Q,同时更新 P 并从 Q 中删除(反之亦然),这只会成为问题。双亲应该只是给交易增加了一层复杂性,但它仍然应该按照你期望的方式工作。
session.beginTransaction();
P p = loadP();
p.remove(c);
session.commit(); //okay
session.beginTransaction();
P p = loadP();
Q q = loadQ();
p.remove(c);
q.alter(c);
session.commit(); //boom