私の問題に関するこのスレッドを読みましたが、まだ質問がありました。
Order と Task の 2 つのエンティティがあります。Order とその子 Task の間には 1 対多の関係があります。
//Order.hbm.xml
<bag name="Tasks" table="Task" inverse="true" cascade="all-delete-orphan">
<key column="OrderID" />
<one-to-many class="Task, Orders" />
</bag>
//Task.hbm.xml
<many-to-one name="Order" column="OrderID" />
タスクを削除し、NHibernate で注文を同期させたいと考えています。
私の最初の試みで問題が発生しました:
削除されたオブジェクトはカスケードによって再保存されます
トランザクションをコミットする前に、Task への Order の参照を手動でクリーンアップすることで、これを解決しました。
public void DeleteTask()
{
NHibernateSessionManager.Instance.BeginTransaction();
//Need to remove Order's reference to Task before deleting so that Task is not resaved.
Task.Order.Tasks.Remove(Task);
TaskDao.Delete(Task);
NHibernateSessionManager.Instance.CommitTransaction();
}
ただし、このコードは NHibernate の XML ファイルで処理できるはずです。これは正しい仮定ですか?Task が削除されたときに、その親 Order の参照も自動的にクリーンアップされるように、NHibernate の構成をどのように変更する必要がありますか?