2010-06-20 3 views
1

내가 가진 부모/자식 관계, 그리고 아이가있는 복합 IDNHibernate에 - 문제가 병합 컬렉션

부모

<id name="Id" type="Int32"> 
     <generator class="identity" /> 
    </id> 

<set name="Children" table="CTable" cascade="all-delete-orphan" inverse="true" lazy="false" > 
    <key column="ParentId"/> 
    <one-to-many class="ChildrenClass"/> 
</set> 

아이

<composite-id unsaved-value="none"> 
    <key-property name="ParentId"/> 
    <key-property name="ChildId"/> 
</composite-id> 

내가 원하는 무엇과 : 1) 취득 부모 DB에서 세션을 닫고 서비스의 부모를 클라이언트에게 전달합니다. 2) 부모가 클라이언트에서 돌아 왔을 때 DB에 모든 자식을 저장합니다. 새 세션

2 단계에서 을 호출합니다. var merged = Session.Merge (product);

나는 NHibernc가 자식 컬렉션에서 추가/삭제 된 요소를 처리하도록 만드는 유일한 방법 인 것처럼 Merge()를 사용합니다. 그러나 새로 추가 된 자식의 모든 ID-s를 nHibernate로 재설정 했으므로 ParentId == 0 그리고 ChildId == 0. 그래서 질문은 - NHibernate가 Merge()에서 전달되는 엔티티로부터 ID를 유지하도록 어떻게 말하는가? .. 도와주세요.

답변

0

매핑 (및 클래스 모델)이 올바르지 않습니다.

자녀는 이드가 아니라 학부모를 언급해야합니다. 매핑은 <key-many-to-one/>

+0

답장을 보내 주셔서 감사합니다. 부모에 대한 하위 참조를 추가하면 어떻게 부모에서 자식 컬렉션을 유지할 수 있습니까? Parent.Children 및 Child.Parent 참조가 모두있을 경우 StackOverflowException (분명히)으로 연결됩니다. 부모를 모아 놓은 자식 컬렉션을 가지고 있으므로 탐색 할 수 있습니다. 가능한가요? – Dmitry

+0

"분명히"? 당신은 잘못. 양방향 관계는 Hibernate에 의해 완전히 지원된다. 먼저 문서를 읽는 것이 좋습니다. –

+0

디에고, 내가 그럭저럭 일할 수 있었다, 그것이 처음에 왜 안했는지 모른다. 감사! – Dmitry