Я программирую функцию для разбивки на страницы в моем уровне репозитория. Функция получает в качестве параметров страничный объект Spring и некоторое значение, подобное этому:
public Page<Foo> filterFoo(Pageable pageable, String value) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Foo> fooQuery = cb.createQuery(Foo.class);
Root<Foo> foo = fooQuery .from(Foo.class);
fooQuery .where(adding predicate for match value);
List<Foo> result = entityManager.createQuery(fooQuery )
.setFirstResult((pageable.getPageNumber() - 1) * pageable.getPageSize())
.setMaxResults(pageable.getPageSize())
.getResultList();
return new PageImpl<>(result, pageable, xxxx);
}
Функция возвращает объект PageImpl пружины, заполненный моим результатом. В PageImpl мне также нужно установить общее количество объектов, соответствующих предикатам. Это число, конечно, должно быть без maxResult и firstResult. Можно ли создать еще один вызов базы данных с моим fooQuery, чтобы получить неограниченное количество записей базы данных для этого запроса? Как лучше всего использовать api страниц и критериев в JPA? Спасибо за совет.
Привет, Вам удалось найти обходной путь для этого?