5

'FormSubmission'엔티티와 일대일 매핑이있는 'Interview'엔티티가 있는데 인터뷰 엔티티는 지배적 인 측면 말하자면, 매핑은 다음과 같습니다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> 

두 개체가 집계 루트로 인터뷰 연기와 집계의 일부입니다. 인터뷰 엔티티를 통해 FormSubmission을 저장/업데이트/삭제하려고합니다. 따라서 협회의 인터뷰 끝을 cascade = "all-delete-orphan"으로 매핑했습니다. 예를 들어,이 같은 잘 새로운 FormSubmission 만들 수 있습니다

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

을 ... 그리고 이것은 FormSubmission가 저장, 잘 작동합니다.

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

을 ... 그러나 이것은 FormSubmission을 삭제하지 않는 것 : 그러나, 나는 이런 식으로 할 노력하고있어 FormSubmission을 삭제할 수없는 것. 나는 협회의 양쪽 모두에 null을 할당 시도했다 :

심지어 폭포를 설정하려고했습니다
myInterview.Submission.Interview = null; 
myInterview.Submission = null; 
InterviewRepository.Save(myInterview); 

= "모든-고아를 삭제"를 FormSubmission 측에,하지만 아무것도 작동하는 것 같다 없습니다. 내가 뭘 놓치고 있니?

답변

5

아마도이 답변을 원하지 않습니다. "모든 삭제 - 고아"캐스케이드는이 문제에 따라 기본 키 일대일 연결에 대해 지원되지 않습니다 : https://nhibernate.jira.com/browse/NH-1262. 심지어 외래 키 one-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

아, 그거 아! 나는 그것을지지하지 않는 것에 대한 그들의 정당성이 무엇인지 궁금합니다. 파비오 마울로 (Fabio Maulo)의 답변에서 '모든 사람이 죽은 고아'라는 것에서 일대일로 판단하는 것? ' 그는 이런 종류의 매핑이 나쁜 생각이라고 생각하지만, 왜 그런지 궁금합니다. –

+0

말하기 어렵습니다. 파비오에게 직접적인 질문입니다. :) 어쨌든 이번 호 http://opensource.atlassian.com/projects/hibernate/browse/HHH-2608에 따라 Hibernate 3.5 (1 살)에서 이미 구현 된 것으로 보인다. Hibernate와 NHibernate 버전이 어떻게 관련이 있는지 모르겠다. ... –

+1

[NH-1262 문제] (https://nhibernate.jira.com/browse/NH-1262)는 이제 다가올 4.1 버전에서 해결 된 것으로 표시되었다. –

관련 문제