2011-03-28 4 views
1

다음 SQL 쿼리를 NHibernate의 ICriteria로 변환하려고합니다.NHibernate - ICriteria 도움말

SELECT DISTINCT m.typeId, t.typeName 
FROM Models m, Types t 
WHERE m.qualifier=? AND m.typeId IS NOT NULL AND m.typeId = t.typeId 

이들은 모두 NHibernate에서 Models 및 ModelType이라는 클래스로 매핑됩니다. ICriteria.List는 ModelType 형식의 목록을 반환해야합니다.

감사합니다.

답변

1

좋은 소식과 나쁜 소식이 있습니다. ModelTypes의 목록을 반환하는 기준을 만들 수 있습니다. 그러나 세션 관리는 수행되지 않습니다. 그 이유는 별개의 쿼리는 투영을 반환 할 수 있고 투영은 항상 관리되지 않기 때문입니다.

아래 쿼리는 두 엔터티 간의 내부 조인을 수행하고 두 개의 열을 기반으로 고유 한 집합을 반환하기 때문에 위 쿼리와 유사한 쿼리를 생성합니다. 결과 변환자는 특성을 통해 설정할 수있는 일부 유형을 생성하도록 설정해야합니다. 아마도 ModelTypes 목록을 반환 할 수 있지만 세션 유형에 의해 관리되지 않는다는 것을 알고 있습니다.

Session.CreateCriteria<Model>() 
    .CreateAlias("Type", "t") 
    .Add(Restrictions.Eq("Qualifier", myQualifier) 
    .SetProjection(Projections.Distinct(
     Projections.ProjectionList() 
      .Add(Projections.Alias(Projections.Property("t.Id"), "Id")) 
      .Add(Projections.Alias(Projections.Property("t.TypeName"), "TypeName")))) 
    .SetResultTransformer(Transformers.AliasToBean<ModelType>()) 
관련 문제