5

我有了一個一對一的映射與「FormSubmission」實體「面試」實體,面試實體占主導地位的側面可以這麼說,映射是:NHibernate的 - 一到一個映射與級聯全刪除,孤兒,不刪除孤兒

<class name="Interview"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="identity" /> 
    </id> 

    // other props (snip).... 

    <one-to-one name="Submission" class="FormSubmission" 
     cascade="all-delete-orphan" /> 
</class> 

<class name="FormSubmission"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="foreign"> 
      <param name="property">Interview</param> 
     </generator> 
    </id> 

    // other props (snip).... 

    <one-to-one name="Interview" class="Interview" 
     constrained="true" cascade="none" /> 
</class> 

兩個實體都與面試充當聚合根集合的一部分。我試圖通過Interview實體保存/更新/刪除FormSubmission,因此我已將關聯的訪問結束映射爲cascade =「all-delete-orphan」。例如,我可以創建一個新的FormSubmission,就像這樣:

myInterview.Submission = new FormSubmission(myInterview); 
InterviewRepository.Save(myInterview); 

...這工作得很好,FormSubmission被保存。不過,我似乎無法刪除的,我試圖做這樣的FormSubmission:

myInterview.Submission = null; 
InterviewRepository.Save(myInterview); 

...但是這似乎並沒有刪除FormSubmission。我試着將null分配給協會的兩面:

myInterview.Submission.Interview = null; 
myInterview.Submission = null; 
InterviewRepository.Save(myInterview); 

我甚至試過設置級聯=「全刪除,孤兒」的FormSubmission的一面,但似乎沒有任何工作。我錯過了什麼?

回答

5

也許這不是回答你想要什麼。根據這個問題,「全刪除,孤兒」級聯不支持主鍵一到一個關聯關係:https://nhibernate.jira.com/browse/NH-1262。即使外鍵一個-to-one關聯最容易忽略的 「全刪除,孤兒」 級聯:

<class name="Interview"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="identity" /> 
    </id> 

    <property name="Name" /> 

    <many-to-one name="Submission" unique="true" cascade="all-delete-orphan" /> 
</class> 

<class name="FormSubmission"> 
    <id name="Id" column="Id" type="Int64"> 
     <generator class="identity" /> 
    </id> 

    <property name="Name" /> 

    <one-to-one name="Interview" cascade="all-delete-orphan" property-ref="Submission" /> 
</class> 

編輯: jchapman suggests使用攔截器(事件偵聽器更優選在NH2.x及更高版本)模仿這個功能聽起來很有趣,但我還沒有清楚如何實現這樣的攔截器/事件監聽器。

+0

噢人,這太差勁了!我想知道他們不支持它的理由是什麼?從法比奧毛羅的回答中的口吻來判斷:「與」全部刪除孤兒「是一對一的?我想他認爲這種映射是一個壞主意,但我想知道爲什麼? – 2011-04-19 08:01:27

+0

很難說,這是直接針對法比奧的問題:)。反正它似乎是Hibernate 3.5(一歲),根據這個問題http://opensource.atlassian.com/projects/hibernate/browse/HHH-2608已經實施。不知道Hibernate和NHibernate版本是如何相關的... – 2011-04-19 19:45:25

+1

[NH-1262問題](https://nhibernate.jira.com/browse/NH-1262)現在在即將到來的4.1版本中被標記爲已解決。 – 2016-05-10 08:02:55