2012-07-02 23 views
0

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

是这样的法律?

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

回答

0

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

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

我会让如果你真的想与标准(其中,恕我直言,这样做你翻译这标准,是因为上面的一个坏主意是更可读,你不需要动态组成你的查询)。

相关问题