JPA с умножением значений CriteriaQuery и ORDER BY - PullRequest
0 голосов
/ 15 марта 2019

Я разочаровался в поиске решения для моего предыдущего вопроса: Spring data - Упорядочить по умножению столбцов , потому что я не мог найти способ добиться этого таким образом.

ПроблемаЯ использую EntityManager с CriteriaQuery, и я пытаюсь найти способ поместить туда предложение ORDER BY, но с умножением на два столбца.Ex.вы храните в БД количество и цену за единицу чего-либо, и вы хотите упорядочить их по общей цене (сумма * единица измерения).

Но когда я пытаюсь cq.orderBy(cb.asc(r.get("amount * unitPrice")));, даже когда оба атрибута находятся в моем DTO,Я всегда получаю java.lang.IllegalArgumentException: Unable to locate Attribute with the the given name [amount * unitPrice].Очевидно, я знаю, почему я получаю это исключение, но я не могу найти никакого обходного пути для выполнения такого запроса.

Я не могу использовать именованный запрос, так как мой запрос принимает фильтр, который я применяю к нему динамически -> Я не могу разместить "where id in ()", так как пользователь не может выбрать какой-либо идентификатор, то есть он хочет показать все из них, и мой именованный запрос ничего не даст.И, конечно, я не могу помешать сортировке в бэкэнде, так как записей так много.

Я долго искал что-то, чтобы достичь этого, и не нашел решения, и я смогу »Я не верю, что это невозможно.

1 Ответ

0 голосов
/ 21 марта 2019

Найден синтаксис для достижения этого:

cq.orderBy(cb.asc(cb.prod(r.get("amount"), r.get("unitPrice"))));

Где cq - это CriteriaQuery, cb - это CriteriaBuilder, а r - это Root

...