代码之家  ›  专栏  ›  技术社区  ›  Merlyn Morgan-Graham

xml映射中项的NHibernate计数

  •  1
  • Merlyn Morgan-Graham  · 技术社区  · 14 年前

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

    一个具体的例子。我的数据库有这些表-

    Entry
      Id
      BodySummary
    
    Comment
      Id
      EntryId
      Body
    

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

    1 回复  |  直到 14 年前
        1
  •  6
  •   Michael Gattuso    14 年前

    我觉得你不能用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. 这不是HQL-必须使用数据库列/表名,而不是映射的类/属性
    2. 提供返回类型,以便NHibernate知道如何将其映射回属性

    您可能希望将此字段设为只读字段,但这是映射它的基本方法。

    生成的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_