Я программирую функцию пагинации в своем слое хранилища. Функция получает в качестве параметров пружинный объект пружины и некоторое значение, подобное этому:
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, чтобы получить все записи базы данных для этого запроса без ограничений? Какова наилучшая практика для использования pageable и критериев API в JPA? Спасибо за совет.