让我们说我有一个名为Tests的表。每个Test对象都有一个分数,我想选择高于平均水平的测试。很容易,使用Projection获得平均测试分数,但我想在一个Criteria下使用它而不是创建第二个并存储平均分数并将其重新插入到下一个Criteria中。
这是合法的吗?
Criteria crit = session.createCriteria(Product.class);
crit.add(Expression.ge("score",Projections.avg("score")));
crit.addOrder(Order.desc("score"));
答案 0 :(得分:0)
没有。您需要执行一个查询,选择所有分数大于所有分数平均值的产品。这需要一个子查询。在HQL中:
select product from Product product
where product.score > (select avg(product2.score) from Product product2)
如果你真的想用Criteria做这个,我会让你把它翻译成Criteria(恕我直言,这是一个坏主意,因为上面的内容更具可读性,你不需要动态编写你的查询)。