Как получить значение min и max, используя jpa, а не используя собственный запрос?
Результат должен быть получен с помощью одной транзакции.
Относительный запрос sql:
SELECT min(price), max(price) FROM product
Я пробовал использовать этот код
criteria.setProjection(Projections.min("price"));
Integer min = (Integer) criteria.uniqueResult();
...
criteria.setProjection(Projections.max("price"));
Integer max = (Integer) criteria.uniqueResult();
но это кажется слишком странным, чтобы выполнять его дважды.




Используйте список проекций:
criteria.setProjection(
Projections.projectionList()
.add(Projections.min("price"))
.add(Projections.max("price"))
);
Что ж, вам нужно использовать ProjectionList с вашим Criteria.
Ваш код будет выглядеть так:
criteria.setProjection(
Projections.projectionList()
.add(Projections.min("price"))
.add(Projections.max("price"))
);
Object[] minMax = criteria.uniqueResult();
Integer min = (Integer) minMax[0];
Integer max = (Integer) minMax[1];
Другой вариант - использовать HQL с min и maxАгрегатные функции:
Query q = session.createQuery("select min(prd.price), max(prd.price) from Product prd");
Object[] minMax = q.getSingleResult();
Integer min = (Integer) minMax[0];
Integer max = (Integer) minMax[1];
@TheHunter Не могли бы вы обновить свой вопрос, указав свои сущности? У вас есть сущность "Продукт", и вы хотите получить в результате другую сущность?
извините за опечатку, я бы предпочел сопоставить результат с сущностью Product, если это невозможно, не беспокойтесь @ chŝdk - спасибо за ответ, это все, что мне нужно.
Я бы предпочел использовать
ProjectionList, но теперь моя проблема заключается в том, как я могу сопоставить минимальную максимальную цену напрямую с сущностью Produce, есть два свойства, касающихсяminPriceиmaxPrice; пытался ли я сcriteria = session.createCriteria(Product.class), но безуспешно.