0
沒有爲我們的實體類的一個後續的簡化映射:級聯刪除可選逆加入
<class name="Parent" table="tParent">
<id name="Id">
<column name="ParentId" sql-type="bigint"/>
<generator class="native"/>
</id>
<join table="tOneToOneComponent" optional="true" inverse="true">
<key column="ParentId" on-delete="cascade"/>
<property name="Someprop"/>
</join>
</class>
基本上,它是一個對一個從關係的另一側的外鍵(這是爲什麼我們設置「反向」)。另外,Parent可能在tOneToOneComponent中沒有任何記錄(所以可選的=「true」)。
我知道,這樣的連接不被推薦,但是我們有一個老大的系統,我們沒有時間去重新設計它。
當Parent被刪除時,我們希望NHibernate刪除相關的tOneToOneComponent。
當然,我們可以級聯SQL服務器上的刪除操作,但是我們需要清除NHibernate緩存以確保tOneToOneComponent不會保留在緩存中的某個位置。
所以我們增加了上刪除=「級聯」的,但現在,當我們刪除父,SQL說:
The DELETE statement conflicted with the REFERENCE constraint
看來,NHibernate的是試圖以錯誤的順序刪除記錄。
如何告訴NHibernate首先刪除tOneToOneComponent(如果存在),然後才刪除父項?