2

我正在研究一个问题,其中有两个“父”类 P 和 Q 将所有删除孤儿级联到“子”类 C。我在 Hibernate 中的直觉告诉我这确实是个坏主意,我当代码删除 P 的实例(即 session.delete(myP); )时,收到一条错误消息,可能证实了这一点:

“删除的对象将被级联重新保存(从关联中删除已删除的对象):[C#1]”

当 P 的实例和 Q 的实例都可以充当同一个 C 实例的父类时,任何人都可以确认为单个子类拥有两个父类是一个坏主意吗?

谢谢!

4

1 回答 1

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
于 2010-07-22T16:52:38.203 回答