В чем ошибка преобразования SQL запроса в JPQL?
Имеется MySQL запрос:
SELECT user_id, SUM(price) sum_price FROM `order` GROUP BY user_id
HAVING sum_price = (
SELECT SUM(price)
FROM `order`
GROUP BY user_id
ORDER BY SUM(price) DESC LIMIT 1
);
Пытаюсь преобразовать его в JPQL. Т.к. JPQL subquery не поддерживает ORDER BY, это заменено на max:
CriteriaQuery<UserPrice> cq = cb.createQuery(UserPrice.class);
Root<Order> root = cq.from(Order.class);
Subquery<BigDecimal> subQuery = cq.subquery(BigDecimal.class);
Expression<BigDecimal> subSum = cb.sum(root.get(ParameterName.PRICE));
Expression<BigDecimal> subMax = cb.max(subSum);
subQuery.select(subMax).groupBy(root.get(ParameterName.USER));
cq.multiselect(root.get(ParameterName.USER), root.get(ParameterName.PRICE))
.groupBy(root.get(ParameterName.USER))
.having(cb.equal(cb.sum(root.get(ParameterName.PRICE)), subQuery));
Но получаю ошибку:
Invalid use of group function
SQL Error: 1111, SQLState: HY000
Hibernate преобразовывает запрос в такой:
select o.user_id, o.price
from `order` o
inner join user u on o.user_id = u.id
group by o.user_id
having sum(o.price) = (select max(sum(o2.price)) from `order` o2 group by o2.user_id)
Ошибка возникает в этом месте, но как этого избежать:
max(sum(o2.price))