как сгруппировать по свойству связанной сущности в критериях? - PullRequest
0 голосов
/ 24 февраля 2010

Я пишу критерии, которые должны группировать результаты по свойству связанного объекта. Я пытался использовать псевдоним, пытался использовать сам путь свойства, но пока ничего не получаю. скажи, что мои классы (черновой набросок):

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

и мне нужен критерий, который возвращает количество А и В для каждой уникальной строки s в С.

моя первая попытка была:

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"))

Это не сильно помогло, поскольку b.c.s не является собственностью 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 критериев?

1 Ответ

0 голосов
/ 25 февраля 2010

может быть что-то вроде этого:

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

я думаю, что вы должны смотреть в два раза createCriteria()

...