Во внешнем интерфейсе есть сетка, в которой отображается объект «Тема». Интерфейс отправляет столбец (поле), который будет использоваться для группировки, количество необходимых строк и некоторые фильтры.
В этом случае интерфейс хочет сгруппировать по столбцу «Комната, ", которая является ссылкой на объект в "Теме".
Чтобы обеспечить правильную работу разбивки на страницы, мне нужно вернуть общее количество групп, которые существовали бы, если бы нумерация страниц не применялась. В настоящее время я добиваюсь этого с помощью двух отдельных запросов, но не думаю, что это оптимальное решение.
Вот (немного упрощенный) основной запрос. Он реализован в специальном репозитории
Код: Выделить всё
final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
final CriteriaQuery mainQuery = criteriaBuilder.createQuery(Tuple.class);
final Root groupRoot = mainQuery.from(Topic.class);
var groupJoin = groupRoot.join(Topic_.room, JoinType.LEFT);
mainQuery.multiselect(groupJoin);
mainQuery.groupBy(groupJoin);
//passed in
Specification combinedSpecification = filterSpec.and(keysSpec);
Predicate mainPredicate = combinedSpecification.toPredicate(groupRoot, mainQuery, criteriaBuilder);
mainQuery.where(mainPredicate);
var startAndSize = getStartAndSize(paginationParameter);
final List mainQueryResult = em.createQuery(mainQuery)
.setFirstResult(startAndSize.getFirst()) //
Подробнее здесь: [url]https://stackoverflow.com/questions/79176565/how-to-get-the-total-count-of-groups-using-spring-boot-jpa-with-pagination[/url]