Я пишу критерии, которые должны группировать результаты по свойству связанного объекта. Я пытался использовать псевдоним, пытался использовать сам путь свойства, но пока ничего не получаю.
скажи, что мои классы (черновой набросок):
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 критериев?