2015-05-27 14 views
8

Używam repozytoriów Spring Data bez żadnych problemów. Gdy próbowałem dodać stronicowanie (używając interfejsu Pageable), działało to poprawnie.Spring Data Hibernate + Pageable: Zwraca puste wyniki

Jednak gdy zwracany zestaw wyników jest mniejszy niż rozmiar strony, wynikiem jest pusta lista.

Poniżej znajduje się mój PageRequest. Domyślne wartości dla index i objectsPerPage wynoszą odpowiednio 0 i 10.

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

Podczas korzystania z zapytania, które zwraca mniej niż 10 wyników, lista wynikowa jest pusta.

ten sposób mogę korzystać z repozytorium w warstwie usługę:

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

EDIT 1 znalazłem przyczynę tego jednak ja wciąż szukają rozwiązania lub obejścia.

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

Kod ten, usytuowany w klasie SimpleJpaRepository sprawia select count... i jeśli liczba jest mniejsza niż offset, zwraca pustą listę.

Odpowiedz

3

Według PageRequest realizacji:

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

więc jeśli ustawisz page do 0 wartość offset musi być również 0 i nie może być większa niż total (jeśli total > 0).

Sprawdź (być może w debugerze), co wartość pageIndex przekazujesz do danych sprężyn. Może to być inna wartość - czasami jest to prosty błąd.

+4

Dziękuję. Problem polegał na tym, że parametr Zapytanie z moich usług REST to 'page = 1' i zapomniałem, że strony są oparte na 0, ale mój interfejs API nie jest. –