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 回答