2009-12-22 5 views
2

클래스 당 테이블을 사용하여 NHibernate에서 매핑 한 상속 계층 구조가 있습니다. 내 mappping 파일은 아래에있는 것과 같습니다 (많은 속성이 생략되었습니다). 상속 : 엔티티 유형 및 하위 클래스 속성에 대한 기준

내가 사용자의 필터 입력을 기반으로 메시지에 대한 동적 DetachedCriteria를 구축하고,이 계층 구조를 조회합니다. 계층 구조의 모든 유형의 메시지는 하나의 목록에서 사용자에게 반환되어야합니다.

  1. 메시지의 유형에 따라 기준을 작성하고 싶습니다. 사용자는 SMSMessage 또는 EmailMessageReceivedDate> '2009-01-01'의 모든 메시지를 가져올 수 있습니다. 내가 어떻게 그 일을하려고 할까?
  2. 동일한 쿼리에서 사용자는 메시지가 내부 메시지 인 경우 우선 순위가 = 2가되어야 함을 지정할 수 있습니다. 이러한 특정 조건부 조건을 어떻게 지정합니까?

이 모든 것이 LINQ에서 가능하기 때문에 NHibernate에서도이 작업을 수행 할 수 있기를 기대합니다.

<class name="Message" table="Message" abstract="true" discriminator-value="null"> 
    <id name="MessageId"> 
    <generator class="identity" /> 
    </id> 
    <discriminator column="Type" type="byte" /> 
    <property name="ParentId" /> 
    <property name="ReceivedDate" /> 
    ... 
    <subclass name="SMSMessage" discriminator-value="0"> 
    <property name="Text" column="Text" /> 
    ... 
    </subclass> 
    <subclass name="MMSMessage" discriminator-value="1"> 
    <property name="Subject" /> 
    ... 
    </subclass> 
    <subclass name="EmailMessage" discriminator-value="2"> 
    <property name="BodyPlainText" /> 
    ... 
    </subclass> 
    <subclass name="InternalMessage" discriminator-value="4"> 
    <property name="Priority" /> 
    ... 
    </subclass> 
</class> 

답변

2

나는 종류의 자신이 알아 낸했지만 결국 내가 HQL/CRITERIAS 너무 많은 장애물에 충돌하기 때문에 순수한 SQL로 되돌아 끝났다. 어쨌든, 내가 어떻게했는지를 나눌 수 있습니다.

  1. 아마 꽤 아니지만, 그 칼럼에 대한 계층 구조 (메시지) 및 고용 제한의 최상위 클래스에 대한 일반 속성으로 판별 자 컬럼을 추가하여 해결했다.

  2. 최상위 쿼리에서도 하위 클래스의 속성에 대한 제한을 지정할 수 있기 때문에 생각보다 쉽습니다. 제한 규정에 관한 문제였습니다.

관련 문제