2012-12-11 2 views
1

관련 객체 목록이 포함 된 클래스가 있습니다. 내가하고 싶었던 무엇Nhibernate One to Many Criteria

<class name="MyDto" table="`MyView`" mutable="false" lazy="false"> 
    <id name="Id" column="ID" type="int"> 
     <generator class="assigned" /> 
    </id> 

    <set name="Days" cascade="all-delete-orphan" lazy="false" > 
      <key column="Id" /> 
      <one-to-many class="MyAssociatedObj"/> 
    </set> 
</class> 

<class name="MyAssociatedObj" table="V_SC_NEED" mutable="false" lazy="false" > 
    <id name="Id" column="`ID2`" type="int"> 
     <generator class="assigned" /> 
    </id> 

    <property type="DateTime" not-null="true" name="DayDate" column="`Date`" /> 

    <component name="Audit"> 
     <property type="string" not-null="true" length="255" name="Username" column="`USERNAME`" /> 
     <property type="decimal" not-null="true" name="PreviousValue" column="`PrevVal`" /> 
    </component> 
</class> 

내 관련 객체, MyAssociatedObject에 의해 필터링 MyDto 개체의 목록을 얻을 수 있습니다 :

나는 다음과 같이 매핑했습니다.

내가 할 즉, 예를 들어, :

UnitOfWork.Session.CreateCriteria<MyDto>().List<MyDto>() 

내가 42 개 라인의 목록을 얻을. 이제는 관련된 객체로 필터를 걸러 내고 싶습니다.

UnitOfWork.Session.CreateCriteria<MyDto>().CreateAlias("Days", "days").Add(Restrictions.Between("days.DayDate", query.FromDate, query.ToDate)); 

을 어떻게 든, 684 개 행을 받고 있어요 : 문제는 내가 그렇게 할 때입니다! (일부 cartesial 제품이나 뭔가).

조언이 있으십니까? 많은 감사! 당신이 MyDTO 클래스와 대일 관계에있는 것으로 보이는, MyAssociatedObj에 합류하기 때문에

+0

MyDto의 equals 메소드를 게시 할 수 있습니까? – Firo

답변

2

당신은 두 번째 쿼리에서 더 많은 행을 얻고있다.

UnitOfWork.Session.CreateCriteria<MyDto>().CreateAlias("Days", "days") 
    .Add(Restrictions.Between("days.DayDate", query.FromDate, query.ToDate)) 
    .SetResultTransformer( 
      new NHibernate.Transform.DistinctRootEntityResultTransformer()); 

는 희망이 도움이 : 당신이 MyDTO의 중복을 필터링 할 경우
, 당신은 DistinctRootResultTransformer를 사용할 수 있습니다.

+0

고마워, 해결 됐어! – user1894419

+0

@ user1894419 그런 다음 허용 된 것으로 답변을 표시해주세요. 다른 사용자에게 도움이 될 수 있습니다. D –