Я написал запрос, используя Hibernate Criteria API, чтобы получить суммирование определенного значения, теперь мне нужно иметь возможность ограничить результат строками, в которых эта сумма больше или равна определенному значению.
Обычно для этого я использовал бы предложение HAVING в моем SQL, но API Criteria, похоже, не поддерживает это в данный момент.
В сыром SQL это то, что мне нужно сделать:
SELECT user_pk, sum(amount) as amountSum
FROM transaction
GROUP BY user_pk
HAVING amountSum >=50;
Один из обходных путей, о котором я подумал, - это использовать подзапрос в предложении 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?
Это код API Criteria, который у меня есть для приведенного выше примера
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")));
Спасибо!