我正在编写一个标准,该标准应按相关实体的属性对结果进行分组。我试过使用别名,尝试使用属性路径本身,但到目前为止我什么也没得到。说我的课是(粗略的草图):
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 获得这种有效的查询?