0

У меня есть простой запрос подкачки по Spring MongoRepository, но MongoRepository, по-видимому, начинает посылать неверный результат после некоторой произвольной высокой страницы #. Я публикую здесь, чтобы узнать, не хватает ли я чего-то, или это может быть ошибкой с Spring MongoRepository.MongoRepository запрос подкачки, возвращающий неверные данные

В моем тесте у меня есть 14 элементов в моей тестовой Монго дБ и ниже запросов поискового вызова работает отлично (данные Извлекает, если его там): pageSize: 10, page#: 0 to 1073741823 Но ниже запроса страницы возвращает мне 10 объектов из моего MongoDB, который я не ожидал: pageSize: 10, page#: 1073741824

Точка перекоса - diff для diff комбинация страницы. При необходимости может делиться.

Ниже библиотеки я использую: определение

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
     <version>1.5.5.RELEASE</version> 
    </dependency> 

    <dependency> 
     <groupId>org.mongodb</groupId> 
     <artifactId>mongo-java-driver</artifactId> 
     <version>2.12.5</version> 
    </dependency> 

Repository:

public interface SomeEntityRepository extends MongoRepository<SomeEntity, Integer> { 
} 

И с помощью этого репозитария, как показано ниже:

public Page<SomeEntity> getSomeEntitiesByPage(int pageIndex, int paseSize, Map<String, Sort.Direction> sortQuery) { 

    Pageable pageableRequest = new PageRequest(pageIndex, pageSize); 

     return someEntityRepository.findAll(pageableRequest); 

} 
+0

В вашем примере у вас есть только 14 записей, но вы требуете запроса для 'pageSize: 10, page #: 0 to 1073741823'. Что такое «1073741823» - можете быть более конкретным? –

+0

@ R4J: поэтому в примере страницы # 0 и 1 возвращают соответственно 10 и 4 объекта. И страницы с 2 по 1073741823 не возвращают содержимое, то есть 'page.hasContent() = false', как и ожидалось. Но удивительно, что для страницы # 1073741824 Integer.MaxValue он возвращает 10 объектов, которых это не должно. – MSD

+0

Ничего себе .. это очень интересно. Я просто попробовал то же самое с моим приложением spring-data-mongodb, и это случилось так же для страницы # 1073741824 или выше. Я думаю, весенние данные сбрасывают страницу # на 0 для любого значения больше 1073741824. Я определенно собираюсь копать больше, и я опубликую то, что я нахожу. – moonlighter

ответ

0

Это проблема с весны MongoRepository и Джира была подана за то же самое. MongoRepository пытается получить требуемое смещение Pageable.getOffset() с типом возврата как int, и когда pageNumber*pageSize > Integer.MaxValue он обернут вокруг как отрицательное смещение, заставив первую страницу получить. Для справки Jira для этого можно найти here

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

  • Нет связанных вопросов^_^