6
에게

을 삭제 계단식으로하지 않습니다 아이의 아이는 아이의 세트입니다. (관련 부분)NHibernate에 내가 (내가 이름을 간체) 부모의 아이가 부모의 집합입니다</b><br> & 자녀의 자녀 부모의 자녀, <b>부모의 이름, 3 개체가</p> <p>, 시나리오는 다음과 같다 어린이

부모를 다음과 같이

매핑입니다

<set name="parentset" 
    table="pc-table" 
    lazy="false" 
    fetch="subselect" 
    cascade="all-delete-orphan" 
    inverse="true"> 
    <key column=FK_ID_PC" on-delete="cascade"/> 
    <one-to-many class="parentchild,parentchild-ns"/> 
</set> 

부모의 자녀

<set name="childset" 
    table="cc-table" 
    lazy="false" 
    fetch="subselect" 
    cascade="all-delete-orphan" 
    inverse="true"> 
    <key column="FK_ID_CC" on-delete="cascade"/> 
    <one-to-many class="childschild,childschild-ns"/> 
</set> 

무엇 내가 달성하고자하는 것은 내가 부모를 삭제하면이 될 것이라고 캐스케이드는 모든 길을 아이의 아이에게 지워줍니다. 그러나 현재 일어나는 것은 이것입니다.

(이 매핑 테스트 목적으로 순전히) 부모 엔티티를 받고 (잘 작동) 지금

IQuery query = session.CreateQuery("from Parent where ID =" + ID); 
IParent doc = query.UniqueResult<Parent>(); 

삭제 부분

session.Delete(doc); 
transaction.Commit(); 

'null 값을 삽입 할 수 없습니다'해결 한 후 계단식 및 반전 오류가 이제이 코드를 사용하여 모든 것을 삭제하지만 부모 만 삭제됩니다.

내가 그리워 할지도 모르는 매핑에 뭔가 빠졌습니까? 올바른 방향으로 어떤 힌트라도 환영합니다!


디에고, 요점 답변에 감사드립니다.

on-delete="cascade"을 제거했다. 왜냐하면 나는 코드에서 가능한 한 많은 제어를하고 데이터베이스에서는 그렇지 않기 때문이다.

아래에 게시 된 코드는 (작업 중) 결과입니다.

부모

<set name="parentset"  
    table="pc-table"  
    cascade="all-delete-orphan"  
    inverse="true" 
    batch-size="5">  
    <key column=FK_ID_PC"/>  
    <one-to-many class="parentchild,parentchild-ns"/>  
</set> 

부모의 자녀

<set name="childset"    
    table="cc-table"  
    cascade="all-delete-orphan" 
    batch-size="5" 
    inverse="true">    
    <key column="FK_ID_CC">    
    <one-to-many class="childschild,childschild-ns"/>    
</set> 

희망이 같은 문제를 가진 사람들을 도와줍니다!

답변

6

키에 on-delete="cascade"을 설정하면 DB에서 계단식을 처리하게됩니다.

당신은 당신의 스키마를 NHibernate로 생성하고 있습니까?

예제를 방금 재생했으며 그 속성을 사용하거나 사용하지 않고 잘 작동했습니다. 그것을 제거 할 때, NHibernate는 케스 케이 딩을 수행한다.

현재 lazy="false" fetch="subselect"을 사용하는 것은 기본적으로 수행해야하는 작업이 아닙니다. 이러한 속성을 제거한 경우 on-delete="cascade"으로두고 cascadesave-update으로 변경하면 부모를 검색하고 삭제하는 두 가지 쿼리 만 있습니다.

관련 문제