2010-07-16 5 views
2

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

«удален объект будет повторно сохранен cascade (удалить удаленный объект из ассоциаций): [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

Спасибо, что сохранили мечту. –