JPA Criteria api - Общее количество записей для конкретного запроса в пределах нумерации страниц - PullRequest
0 голосов
/ 16 января 2019

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

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? Спасибо за совет.

...