2015-05-27 4 views
8

Я использую хранилища Spring Data без проблем. Когда я попытался добавить пейджинг (используя интерфейс Pageable), он работал нормально.Spring Hibernate + Pageable: возвращает пустые результаты

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

Ниже приведено мое PageRequest. Значения по умолчанию для индекса и объектовPerPage равны 0 и 10 соответственно.

new PageRequest(pageIndex_, objectsPerPage_, new Sort(orders)) 

При использовании его с запросом, который возвращает менее 10 результатов, результирующий список пуст.

Это, как я использую хранилище в слое службы:

repository.findAll(MySpecification.searchClients(criteria), 
      myPagingSpecification(criteria.getPageIndex(), criteria.getNumberPerPage(), null)) 
      .getContent(); 

EDIT 1 я нашел причину этого, однако я до сих пор ищу решение или обходной путь.

 Long total = QueryUtils.executeCountQuery(getCountQuery(spec)); 
    List<T> content = total > pageable.getOffset() ? query.getResultList() : Collections.<T> emptyList(); 

Этот код, расположенный в SimpleJpaRepository класса делает select count... и если число меньше, то смещение, возвращает пустой список.

ответ

3

Согласно PageRequest реализации:

public int getOffset() { 
    return page * size; 
} 

поэтому если вы установите page в 0 значение offset также должно быть 0 и не может быть больше, чем total (если total > 0).

Проверьте (возможно, в отладчике), что pageIndex ценность, которую вы передаете весенним данным. Это может быть другая ценность - иногда это простая ошибка.

+4

спасибо. Проблема заключалась в том, что параметр Query из моих служб REST был 'page = 1', и я забыл, что страницы основаны на 0, но мой API - нет. –

Смежные вопросы