1

假设我有两个实体FooBar其中Foohas-manyBar的,

class Foo {
  int ImportantNumber { get; set; }
  IEnumerable<Bar> Bars { get; set; }
}

class FooDTO {
  Foo Foo { get; set; }
  int BarCount { get; set; }
}

如何使用单个查询有效地总结 DTO中Barsper的数量,最好仅使用 Criteria 接口。Foo

我尝试了多种方法来使用“SetProjection”从查询中获取原始实体,但没有运气。目前的理论是做类似的事情

SELECT 
  Foo.*, BarCounts.counts 
FROM
  Foo LEFT JOIN 
    ( SELECT fooId, COUNT(*) as counts FROM Bar GROUP BY fooId ) AS BarCounts 
    ON Foo.id=BarCounts.fooId

但是有了标准,我似乎无法弄清楚如何。

4

1 回答 1

1

Criteria 可能不是最好的 API ...... HQL 更容易:

var fooDTOs = session.CreateQuery(@"
              select foo as Foo,
                     count(elements(foo.Bars)) as BarCount
              from Foo foo
              group by foo.id, foo.ImportantNumber
              ")
              .SetResultTransformer(Transformers.AliasToBean<FooDTO>())
              .List<FooDTO>();
于 2010-05-10T03:01:27.437 回答