2008-09-28 3 views
3

본인은 부모/자녀 관계입니다. .NET에 뉴스를 쓰고 아이들을 추가하면 괜찮습니다. NHibernate 좋은 반응을 보이고 올바른 관계를 추가합니다.NHibernate + JSON/Ajax 부모/자식 관계? 왜 이것이 효과가 없습니까?

그러나 클라이언트에서 JSON object을 .NET 표현으로 JSON을 직렬화하는 일부 메서드로 전달할 때 NHibernate가 혼란스러워하는 것 같습니다. 그것은 상위 쿼리를 추가하기위한 정확한 쿼리를 제공하지만, id를위한 새로운 GUID를 할당한다. 그러나 실행하려고하는 SQL의 자식 객체에 그 부모 ID를 연관시키지 않는다. 나는 아래 나열된 빠르고 더러운 해킹을 생각해 냈습니다.하지만 궁금한 점이 있습니다. 여기에 누락 된 것이 있습니까?

IList<BackerEntry> backersTemp = new List<BackerEntry>(); 
foreach (BackerEntry backerEntry in jsonBackerEntity.BackerEntries) 
{ 
    backersTemp.Add(backerEntry); 
} 

jsonBackerEntity.BackerEntries.Clear(); 

foreach (BackerEntry backerEntry in backersTemp) 
{ 
    jsonBackerEntity.AddChild(backerEntry); 
} 

그런 식으로하면 NHibernate에이 자식이 실제로이 부모에 속하는 것을 볼 수있는 유일한 방법입니다. 내하는 AddChild 방법은 다음과 같습니다 내부의

public virtual void AddChild(BackerEntry backerEntry) 
{ 
    if (backerEntry.Backer != null) 
    { 
    backerEntry.Backer.BackerEntries.Remove(backerEntry); 
    } 
    backerEntry.Backer = this; 
    this.BackerEntries.Add(backerEntry); 
} 

편집 : 난 그냥 이유를 실현했다고 생각 - 아마 내가 JSON에 아이의 부모 속성을 다시 전송하고 있지 않다 때문이다. 그 둘의 원형 적 특성으로 인해 가능할 지 확신 할 수 없습니다. 아이에게는 부모가 있습니다 (누가 json에 부모가있는 원래 아이 인 아이가 있습니까?) 어떤 아이디어입니까?

답변

1

Hibernate를 사용하여 saveOrUpdate를 수행하기 전에 모든 객체 하위에 동일한 메모리 객체 부모가 있는지 확인해야합니다. 매핑을 검토하고 데이터베이스의 모든 행이 단 하나의 메모리 객체라고 생각하고 이것이 맞는지 확인하고 ParentObject를이 객체에 맞게 재설정하십시오.

더 융통성있는 병합 방법으로 시도해 볼 수도 있습니다.

관련 문제