2010-07-16 41 views
2

我正在研究一个问题,其中有两个“父”类,P和Q级联全部删除孤儿到“子”类,C.我在Hibernate中的直觉告诉我这是一个糟糕的主意,当代码删除P的一个实例(即session.delete(myP);)时,我得到一个错误消息:休眠在两个父类的子类上的所有删除孤儿

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

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

谢谢!

回答

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 
+0

谢谢你保持梦想活着。 – 2010-07-23 03:49:01