5
나는이 내 엔터티 모델에 정의 된 다음 엔터티 :HQL 질의
public class MyContainer
{
public virtual ICollection<Base> Subs { get; set; }
}
public abstract class Base
{
public virtual Guid Id { get; set; }
}
public abstract class Sub1 : Base
{
public virtual int MyValue { get; set; }
}
public abstract class Sub2 : Base
{
public virtual int MyValue { get; set; }
}
및 위의 실체에 대해 다음 FluentNHibernate 매핑 :
public sealed class BaseMap : ClassMap<Base>
{
public BaseMap()
{
Table("BaseTable");
Id(e => e.Id);
}
}
public sealed class Sub1Map : SubClassMap<Sub1>
{
public Sub1Map()
{
Table("Sub1Table");
KeyColumn("BaseId");
Map(e => e.Myvalue);
}
}
public sealed class Sub2Map : SubClassMap<Sub2>
{
public Sub2Map()
{
Table("Sub2Table");
KeyColumn("BaseId");
Map(e => e.Myvalue);
}
}
내가 실행 다음 HQL :
select sub
from MyContainer container
join fetch container.Subs sub
where sub.MyValue = :p1
생성 된 SQL은 하위 클래스 ho Wever에게의, 즉은, 다음과 같은 골격 SQL은 정확한 생성 조인 생성 :
SELECT ...
FROM BaseTable bt
INNER JOIN Sub1Table st1 ON ...
INNER JOIN Sub2Table st2 ON ...
WHERE st1.MyValue = @p1
을 내가 추가 또는를 기대하고있어 같은 경우 WHERE 절 :
SELECT ...
FROM BaseTable bt
INNER JOIN Sub1Table st1 ON ...
INNER JOIN Sub2Table st2 ON ...
WHERE st1.MyValue = @p1
OR st2.MyValue = @p2
내가 '뭔가 있나요 m 누락, 또는 HQL을 다시 작성하여 WHERE 절의 각 하위 클래스를 참조하고 제약 조건을 직접 적용 할 수 있습니다 (생성 된 SQL에서 추가 제약 조건을 생성한다고 가정).
저는 NHibernate 3.0.0을 사용하고 있습니다.
하는 경우 SubclassMap을 사용하여 매핑을 만드는 대신 오래된 JoinedSubClass() 접근법을 사용합니다. WHERE 절에서 어떤 제약 조건이 나오는 지 순서가 변경됩니다. 나는 이해하지 못한다. –