2

私は問題を調査しています.PとQの2つの「親」クラスがあり、「子」クラスCに全削除孤児をカスケードします.Hibernateでの私の直感は、これは本当に悪い考えであり、私はコードが P のインスタンスを削除するとき (つまり、 session.delete(myP); )、おそらくこれを確認するエラー メッセージを取得します。

「削除されたオブジェクトはカスケードによって再保存されます (関連付けから削除されたオブジェクトを削除します): [C#1]」

P のインスタンスと Q のインスタンスの両方が C の同じインスタンスの親として機能できる場合、単一の子クラスに対して 2 つの親クラスを持つことは悪い考えであることを誰かが確認できますか?

ありがとう!

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 に答える