0

Testsというテーブルがあるとしましょう。各テストオブジェクトにはスコアがあり、平均を超えるテストを選択したいと思います。簡単に、プロジェクションを使用して平均テストスコアを取得しますが、1つ目の基準を作成して平均スコアを保存し、次の基準に再挿入するのではなく、すべてを1つの基準で使用したいと思います。

このようなものは合法ですか?

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 に答える