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