0

让我们声明我有一个名为 Tests 的表。每个测试对象都有一个分数,我想选择高于平均水平的测试。很容易,使用投影来获得平均测试分数,但我想在一个标准下使用它,而不是创建第二个并存储平均分数并将其重新插入下一个标准。

这样的事情合法吗?

Criteria crit = session.createCriteria(Product.class);
crit.add(Expression.ge("score",Projections.avg("score")));
crit.addOrder(Order.desc("score"));
4

1 回答 1

0

不可以。您需要执行一个查询来选择所有得分高于所有得分平均值的产品。这需要一个子查询。在 HQL 中:

select product from Product product
where product.score > (select avg(product2.score) from Product product2)

如果你真的想用 Criteria 来做,我会让你把它翻译成 Criteria(恕我直言,这是一个坏主意,因为上面的可读性更强,你不需要动态地编写查询)。

于 2012-07-02T15:28:33.737 回答