0

関連エンティティのプロパティによって結果をグループ化する基準を作成しています。エイリアスを使用してみたり、プロパティ パス自体を使用してみたりしましたが、これまでのところ何も得られません。私のクラスは(ラフスケッチ):

class A{
 @ManyToOne(...)
 B b;
}
class B{
 @OneToOne(...)
 C c;
}
class C{
 String s;
}

そして、C の一意の文字列 s ごとに A と B の量を返す基準が必要です。

私の最初の試みは:

session.createCriteria(A.class)
  .setProjection(Projections.projectionList()
    .add(Projections.groupProperty("b.c.s"), "string")
    .add(Projections.countDistinct("b"), "b's")
    .add(Projections.rowCount(), "a's"))

bcs は A のプロパティではないため、これはあまり役に立ちませんでした。

それから私は試しました

session.createCriteria(A.class)
  .createAlias("b.c", "al")
  .setProjection(Projections.projectionList()
    .add(Projections.groupProperty("al.s"), "string")
    .add(Projections.countDistinct("b"), "b's")
    .add(Projections.rowCount(), "a's"))

これは実際に SQL に変換されましたが、クエリに結合が含まれていなかったため、それほどうまくいきませんでした。

私はここで何か間違っているようです。

基準 API を使用して、この種の効率的なクエリを取得することは可能ですか?

4

1 に答える 1

0

多分このようなもの:

sess.createCriteria(A.class)
    .createCriteria("b")
    .createCriteria("c")
    .setProjection(Projections.projectionList()
    .add(Projections.groupProperty("s"), "string")
    .list()
    .size()

私はあなたが二重に見なければならないと思いますcreateCriteria()

于 2010-02-25T10:03:44.190 に答える