2016-11-14 8 views
0

아래는 내 부모 자식 관계 클래스 및 매퍼입니다. 우리는 프로젝트에서 Nhibernate 4.0.0.4000을 사용하고 있습니다. session.Merge (Parent)를 호출하여 Db에 삽입 할 새 자식 개체가있는 부모를 업데이트합니다. 자식 객체의 code_column에 Null 예외를 삽입 할 수 없습니다. 누군가 내 매퍼 코드의 어느 부분이 잘못되었는지 안내 할 수 있습니까?일대 다 관계 합성 키 문제 Nhibernate

Public class parent { 
    public virtual string Code { get; set; } 
    public virtual string Desc { get; set; } 
    public virtual IList<Child> Children{ get; set; } 
    public virtual int version {get;set;} 
} 

Public class Child { 
    public virtual parent ParentObj{ get; set; } 
    public virtual string Code1{ get; set; } 
    public virtual string Code2{ get; set; } 
    public virtual int version {get;set;} 
} 


public class ParentMap : ClassMap<Parent> { 
public ParentMap() { 
    Table("Parent_Table"); 
      LazyLoad(); 
      OptimisticLock.Version(); 

    Id(x => x.Code) 
      .Column("Code_Column") 
      .Index("Code_IDX1") 
      .Length(5) 
      .Unique() 
      .GeneratedBy.Assigned() 
      .Not.Nullable(); 

      Version(x => x.Version) 
       .Column("VERS") 
       .UnsavedValue("0"); 

      HasMany(x => x.Children) 
        .AsBag() 
       .KeyColumn("Code_Column") 
       .Inverse() 
       .LazyLoad() 
       .Cascade.All(); 
} 

} 


public class ChildMap: ClassMap<Child> { 
public ChildMap() { 
Table("Child_Table"); 
      LazyLoad(); 
      OptimisticLock.Version(); 

      CompositeId() 
       .KeyReference(u => u.Code, "Code_Column") 
       .KeyProperty(u => u.Code1, "CODE1_column") 
       .KeyProperty(u => u.Code2, "CODE2_column"); 

      Version(x => x.Version) 
      .Column("VERS") 
      .UnsavedValue("0"); 
} 

} 
+0

런타임에 하위 개체가 해당 부모에 대한 올바른 null이 아닌 참조를 가지고 있습니까? –

+0

Hello David, 요청 해 주셔서 감사합니다. 런타임에 올바르다. 이것은 게으른로드로 인해 session.merge 메소드에서 문제가 발생한 복합 ID입니다. 아래 기사에서는 문제와 해결 방법에 대해 설명합니다. 나는 복합 ID에 대해 별도의 클래스를 작성하여 똑같이 따라 갔다. http://nhibernate.info/blog/2010/06/30/nhibernate-and-composite-keys.html – Babu

답변

0

아마도 지연로드 때문에 session.merge 메소드에 문제가있는 복합 ID입니다. 합성 키가있을 때 복합 키에 대한 클래스를 생성하고이를 사용하여 엔티티에서 잘 작동합니다.