【问题标题】:NHibernate - Help with ICriteriaNHibernate - 帮助 ICriteria
【发布时间】:2011-03-28 12:09:28
【问题描述】:

我正在尝试将以下 SQL 查询转换为 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 类型的列表。

谢谢

【问题讨论】:

    标签: nhibernate nhibernate-criteria


    【解决方案1】:

    有好消息也有坏消息。您可以创建一个返回模型类型列表的条件。但是,它们不会被会话管理。原因是,一个不同的查询只能返回一个投影,而投影总是不受管理的。

    下面的查询将生成与上面类似的查询,因为它在两个实体之间进行内部连接,并根据这 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>())
    

    【讨论】:

      猜你喜欢
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 1970-01-01
      相关资源
      最近更新 更多