Hibernate Criteria APIを使用して特定の値の合計を取得するクエリを作成しました。次に、その合計が特定の値以上の行に結果を制限できるようにする必要があります。
通常、これを行うためにSQLでHAVING句を使用しますが、CriteriaAPIは現時点ではそれをサポートしていないようです。
生のSQLでは、これが私が行う必要があることです。
SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk
HAVING amountSum >=50;
私が考えた回避策の1つは、FROM句でこの合計値を取得するサブクエリを使用し、外部クエリを使用してWHERE句を使用して制限することです。
したがって、生のSQLでは次のようになります。
SELECT user_pk, amountSum
FROM (SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk)
WHERE amountSum > 50;
Criteria APIを使用してこれを作成する方法、またはHAVINGの問題を解決するために使用できるその他の提案/回避策について、誰かが私に正しい方向を示すことができますか?
これは、上記の例で使用したCriteriaAPIコードです。
DetachedCriteria criteria = DetachedCriteria.forClass(Transaction.class,"transaction");
criteria.setProjection(criteria.setProjection(Projections.projectionList().add(
Projections.groupProperty("user.userPK").as("user_pk")).add(
Projections.sum("transaction.amount").as("amountSum")));
ありがとう!