1

2 つのエンティティがFooあり、 has-manyBarがどこにあるとします。FooBar

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

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

できれば Criteria インターフェイスのみを使用して、単一のクエリを使用して DTOのBarsperの数を効率的に合計するにはどうすればよいですか。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 に答える