ID가 포함 된 3 개의 열이있는 테이블이있는 상황이 있습니다. 이 3 열 이외에 몇 가지 속성이있는 몇 개의 열이 있습니다.NHibernate에서 null 값을 포함하는 합성 ID
3 개의 열이 Foo, Bar, Baz라고 가정 해 봅시다. Foo는 null이 아니며 Bar, Baz 중 하나가 null입니다.
내 기업 및 매핑 (나는 간단한 일을 계속하고 싶어 염두에 두시기 바랍니다) 다음과 같습니다
public class FooBarBaz
{
public virtual Foo Foo { get; set; }
public virtual Bar Bar { get; set; }
public virtual Baz Baz { get; set; }
public virtual string Prop { get; set; }
public override bool Equals(Object obj)
{
/* checks for nulls etc. in the end
returns Foo == obj.Foo && Bar == obj.Bar && Baz == obj.Baz */
}
public override int GetHashCode()
{
/* builds unique string for (Foo,Bar,Baz)
taking nulls into account and gets it's hashcode */
}
}
public class FooBarBazMap : ClassMap<FooBarBaz>
{
public FooBarBazMap()
{
CompositeId()
.KeyReference(x => x.Foo, "Foo_Id")
.KeyReference(x => x.Bar, "Bar_Id")
.KeyReference(x => x.Baz, "Baz_Id");
Map(x => x.Prop);
}
}
내가 수동으로 모든 세 개의 열이 null이 아닌 행을 생성하고,이 매핑은 완전히 작동 벌금. 하지만 내 응용 프로그램 로직은 항상 두 개 (Bar, Baz) 중 하나가 null이라는 사실을 기반으로하며,이 상황에서 NHibernate는 FooBarBaz 엔터티로 null을 반환합니다.
이 문제를 어떻게 극복 할 수 있습니까? NHibernate는 CompositeId에서 null 값을 허용합니까?
나는이 열이 기본 키라고 말하지 않았다. – szymzet
하지만 compositeid로 매핑하면 nh는 그렇게 생각하고 db와 동일하게 동작합니다. 그래서 당신의 질문에 답하십시오 : 아니오. – Firo