2011-12-23 161 views
4

我正在尋找一種配置nhibernate的方法,以便孤兒子實體被自動刪除,但如果父母被刪除且子女存在,刪除查詢父母被執行,但不是爲了孩子。基本上我想設置我的級聯選項是「save-update-orphan」,但不支持。Nhibernate:刪除孤兒但在刪除父母時不刪除子女

<set name="children" inverse="true" cascade="all-delete-orphan" access="field"> 
     <key column="ParentId" /> 
     <one-to-many class="Parent" /> 
    </set> 

全刪除孤兒對我來說不起作用,因爲它會在刪除父項時自動刪除子項。

更新 嘗試和更清楚......當我明確地從父母的集合中刪除孩子,我想要孩子刪除。當我明確刪除父母時,我不希望孩子被刪除。

+1

通過刪除父項來創建孤兒孩子。爲什麼你想孤兒刪除,但也希望它在同一時間? – Iain 2011-12-23 06:05:36

+0

@lain當我明確地從父母的集合中刪除孩子時,我想要孩子被刪除。當我明確刪除父母時,我不希望孩子被刪除。我知道這很奇怪。如果你喜歡,我可以更新問題以獲得更多的上下文。 – 2011-12-23 06:21:03

+0

啊我現在明白了,可能值得爲其他人更新問題。 – Iain 2011-12-23 06:24:38

回答

4

我不相信你可以通過配置做你想做的事。

我能想到的唯一選擇是關閉孤立刪除,並在需要刪除時手動刪除子項。

NHibernate Cascades: the different between all, all-delete-orphans and save-update

下面是每個級聯選項意味着:

  • 沒有 - 沒有做任何級聯,讓用戶自己處理它們。
  • save-update - 當對象被保存/更新時,檢查相關並保存/更新任何需要它的對象(包括 保存/更新多對多場景中的關聯)。
  • 刪除 - 刪除對象時,刪除關聯中的所有對象。
  • delete-orphan - 刪除該對象時,刪除該assoication中的所有對象。除此之外,當一個對象被刪除 從assoication而不與另一個對象 (孤兒),assoticated,也刪除它。
  • 全部 - 當一個對象是保存/更新/刪除時,檢查assoications並保存/更新/刪除找到的所有對象。
  • all-delete-orphan - 當一個對象是保存/更新/刪除時,檢查相關並保存/更新/刪除找到的所有對象。在 之外,當一個對象從assoication中被移除並且 沒有與另一個對象(孤立的)關聯時,也將其刪除。
0

那麼,你應該刪除childobject,如果那是你想要刪除的。也就是說,如果您不想刪除父項,請不要試圖通過父項刪除該子項。