NHibernate中的NHibernate计数

时间:2010-11-08 11:36:09

标签: nhibernate nhibernate-mapping

NHibernate中是否有办法将计数查询的结果映射到类的属性?我想在XML映射中执行此操作。

我知道我可以通过代码(通过实际查询计数的构造,或通过作弊,执行完整查询,并计算结果项)来表达这一点,但如果我能写一些简短的SQL会很好或HQL并以某种方式将其插入到我的XML映射中。

一个具体的例子。我的DB有这些表 -

Entry
  Id
  BodySummary

Comment
  Id
  EntryId
  Body

我想获得一些条目摘要。对于每个条目,我想得到评论计数(和正文摘要)。

仅供参考:我省略了我的数据库中不相关的部分,例如作者,条目标题/正文,时间戳等。这当然应该与我询问的查询部分无关。

1 个答案:

答案 0 :(得分:6)

我认为你不能用HQL做到这一点。但是这里是如何用SQL做的:

<class name="Entry" .... >
  <id>
    //ID Strategy
  </id>
  <property name="BodySummary" />
  ...
  <property name="CommentCount" formula="(SELECT COUNT(*) FROM Comment c WHERE c.EntryId = Id)" type="Int32" />
</class>

重要提示:

  1. 将sql包装在括号中 - 如果没有包装则会出错
  2. 这不是HQL - 您必须使用数据库列/表名而不是映射的类/属性
  3. 提供返回类型,以便NHibernate知道如何将其映射回属性
  4. 您可能希望将其设为只读字段,但这是您如何映射它的基础知识。

    结果SQL将是这样的:

    SELECT          this_.Id                as Id11_0_,
                    this_.BodySummary       as BodySummary10_11_0_,
                    (SELECT COUNT(* )
                     FROM   Comment c
                     WHERE c.EntryId = this_.Id) as formula0_0_
    FROM     Entry this_