2011-12-11 36 views
8

業務邏輯的處理內部:NHibernate的 - 項獲得其PARENTID更新爲空,而不是刪除

  • 開始交易
  • 項目添加到集合
  • 執行查找(「somethingA 「)
  • 根據上一步刪除該項目。
  • 提交事務

進出口使用級聯全刪除,孤兒,和逆=真正的,無論是在我的父類。從集合中刪除項目時,我設置了.parentObj = null並從集合中刪除項目。

當使用TemplateFlushMode.Auto,我異型數據庫和下面的做:

  • INSERT項目
  • 選擇該項目的相關tosomethingA
  • UPDATE的parentID(FK的父)爲NULL

(插入項目已完成,因爲已完成find(),以確保數據庫中的數據一致性)。選擇完成後,我預計會執行DELETE ...但已完成對parentID = null的更新。

Find()前右執行Session.Flush()時,會發生以下情況:

  • INSERT項目
  • 選擇與tosomethingA
  • 刪除項目

當使用TemplateFlushMode.Commit,改變完成在交易結束時,該項目永遠不會被插入:

  • 選擇與tosomethingA

我與使用TemplateFlushMode.Auto工作的應用程序,所以我不知道,是有原因,如果選擇在一個之間進行級聯工作不解釋項目被添加,然後在同一個事務中刪除?

我知道出現的第一個答案是「不要將項目添加到集合,如果它將在以後刪除」。但我寧願不改變業務邏輯。

有沒有人知道爲什麼使用AUTO時更新正在完成而不是delete? (當使用Commit它不插入對象)

+0

嘿阿德里安,很好的問題,我也有同樣的問題,你實際上是。 – san983

+1

您能否顯示映射? – giammin

+0

我可以問你想用這個做什麼?它可能是一個不同的解決方案。 – ivowiblo

回答

0

您是否使用雙向一對多綁定?您是否在details表中的外鍵上標記了not-null="true"?你能否發佈你的映射XML文件以便更好地理解?

我知道我沒有回答你的問題,但我沒有足夠的聲望來發表評論。

1

我猜你應該使用在映射文件中的cascade="delete"選項以級聯刪除上

相關問題