2011-03-28 109 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

有好消息和壞消息。您可以創建一個標準,返回一個ModelType列表。但是,他們不會受到會話管理。原因是,一個獨特的查詢只能返回一個投影,並且投影總是不受管理的。

下面的查詢將生成與上述類似的查詢,因爲它在兩個實體之間進行內部連接,並根據這2列返回一個不同的集合。結果轉換器應設置爲生成可通過屬性設置的某種類型。您可以返回一個ModelType列表,但只知道它們不會被會話管理。

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>())