Hibernate all-delete-orphan в дочернем классе с двумя родительскими классами - PullRequest
2 голосов
/ 16 июля 2010

Я смотрю на проблему, в которой есть два «родительских» класса, P и Q, которые каскадно все-удаляют-сироту для «дочернего» класса, C. Моя интуиция в Hibernate говорит, что это действительно плохая идеяи я получаю сообщение об ошибке, которое, вероятно, подтверждает это, когда код удаляет экземпляр P (т.е. session.delete (myP);):

"удаленный объект будет повторно сохранен каскадом (удалить удаленный объект)из ассоциаций): [C # 1] "

Может ли кто-нибудь подтвердить, что наличие двух родительских классов для одного дочернего класса - плохая идея, когда экземпляр P и экземпляр Q могут одновременно выступать в качестве родителя длятот же экземпляр C?

Спасибо!

1 Ответ

1 голос
/ 22 июля 2010

Я предполагаю, что это будет проблемой только в том случае, если у вас есть 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
...