Разбивка на страницы с помощью API JPA Criteria, включающего сложные критерии - PullRequest
0 голосов
/ 29 апреля 2018

Я пытаюсь разбить результаты на страницы с помощью API критериев JPA. После просмотра этого ответа: Общее количество строк для разбивки на страницы с использованием JPA Criteria API

Я вижу, что способ сделать это - сделать отдельный запрос, который подсчитывает количество строк, возвращаемых этим конкретным критерием запроса. (Они делают это, создавая массив предикатов и используя один и тот же список как для запроса подсчета, так и для фактического разбитого на страницы запроса).

Однако мой запрос критериев не может быть реплицирован простым списком предикатов, поскольку он включает в себя множество объединений с другими таблицами и предикатов, в которых сравниваются результаты, возвращаемые из подзапросов.

Мне было интересно, есть ли удобный способ получить количество строк для конкретного критерия запроса без дублирования запроса. (Или, если есть простой способ получить подробную копию запроса критерия, передав ссылку)

Заранее спасибо!

1 Ответ

0 голосов
/ 14 мая 2018

«Удобный способ» сделать это - использовать нативный SQL и использовать оконные функции. Вы можете легко добавить оконную функцию к своему верхнему уровню SELECT, которая просто считает все строки следующим образом:

SELECT x, y, ..., COUNT(*) OVER()
FROM ...

Используя SQL вместо JPQL / Criteria API, вы получите доступ к множеству других очень полезных функций, таких как приведенные выше.

...