Надежно ли использовать PagingAndSortingRepository.findAll (Pageable pageable) с несортированным pageable? - PullRequest
1 голос
/ 08 апреля 2020

Поскольку оператор select без предложения order by должен рассматриваться как не имеющий определенного порядка ( см. Этот вопрос ), кажется, что использовать PagingAndSortingRepository.findAll(Pageable pageable) ненадежно, поскольку нет гарантии что каждая страница будет иметь уникальные строки. Так ли это?

Чтобы подробнее остановиться на моей проблеме, предположим, что у нас есть 20 строк с идентификаторами в диапазоне [1, 20]. Предположим, что клиент делает запрос для первой страницы размером = 10 и получает строки с идентификаторами [1, 10]. Предположим, клиент делает запрос на вторую страницу. Ожидаемый результат - увидеть строки с идентификаторами [11, 20]. Однако, поскольку нет гарантии на порядок, второй запрос не гарантирует возврата [11, 20] и может содержать любые строки с идентификаторами [1, 10].

Действительно ли проблема действительна?

1 Ответ

0 голосов
/ 08 апреля 2020

Порядок данных для findAll(Pageable pageable) зависит от базы данных, если не используется параметр сортировки.

Используя параметр без сортировки в findAll(Pageable pageable), вы не можете добавлять какие-либо условия в запрос к базе данных. Вы можете просто использовать OFFSET и LIMIT для нумерации страниц. Таким образом, база данных всегда следует порядку по умолчанию для разных запросов нумерации страниц. База данных поддерживает свой порядок по умолчанию с помощью запросов OFFSET и LIMIT, если ORDER BY или какое-либо условие не используется.

Таким образом, вполне нормально использовать PagingAndSortingRepository.findAll(Pageable pageable) с несортированной страницей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...