Я столкнулся с проблемой в разбивке на страницы. Я использую критерии. Длина отображения - 10. При нажатии на разбиение на страницы отображаются разные результаты, например, список 9 и 8. Как избежать таких проблем с разбивкой по страницам. Мне нужен список 10 каждый раз. Как контролировать этот вид несогласованности.Разбиение страницы с помощью гибернационных критериев
ответ
Пользователь setFirstResult()
и setMaxResults()
для этого. Вот короткий пример кода:
EntityManager em = .....
....................
TypedQuery<T> query = em.createQuery(criteria);
query.setFirstResult(pageNumber * pageSize);
query.setMaxResults(pageSize);
Если вы используете firstResult и maxResults то, что означает, что результирующий набор потенциально очень большой, и вы хотите повторно выполнить запрос для каждой страницы. Если это так, то данные могут меняться между запросами, что приводит к несогласованным результатам. Единственный способ попытаться контролировать это - это отсортировать по некоторому уникальному значению или группе значений (первичный ключ или уникальный индекс) и добавить ограничение на запрос критериев, требующий, чтобы результаты имели значения или группы значений, превышающие последний результат на предыдущей странице. Даже тогда вставки, обновления и удаления между страницами все равно будут приводить к несоответствиям в результатах.
Если максимальное количество результатов является чем-то разумным (скажем, 500-1000 результатов), то может быть проще просто вывести все соответствующие результаты, кешировать их в памяти и обрабатывать пейджинг в слое пользовательского интерфейса, чтобы обеспечить согласованность. Общая стратегия состоит в том, чтобы ограничить запрос до некоторого разумного количества результатов (например, 1000) и установить максимальные значения для этого плюс 1 (например, 1001). Если количество возвращаемых результатов больше, чем ваш произвольный предел (то есть 1001 вице-1000), тогда отобразите пользователю указание, что было найдено более 1000 результатов, и запрос должен быть более конкретным (или пригласить их для получения следующих 1000 результатов).
- 1. Разбиение страницы с помощью PrincipalSearcher
- 2. Разбиение страницы с помощью Kaminari
- 3. Разбиение страницы с использованием нескольких критериев поиска в кодеигниторе
- 4. Разбиение страницы на страницы с помощью wordpress
- 5. Разбиение страницы с помощью Ajax с JSON
- 6. Разбиение страницы с помощью ItemsCollection # query?
- 7. Разбиение на страницы с помощью Google Maps
- 8. Разбиение страницы для facebook с помощью javascript
- 9. Разбиение страницы с помощью Backbone.js и Marionette.js
- 10. Назначить разбиение на страницы с помощью функции
- 11. Разбиение страницы с помощью кнопок в android
- 12. Разбиение страницы с помощью Alamofire и realm.io
- 13. Разбиение на страницы с помощью Kaminari, Rails
- 14. Установить разбиение на страницы с помощью codeigniter
- 15. Разбиение страницы с помощью спящего режима
- 16. разбиение на страницы миниатюр с помощью kaminari
- 17. Разбиение страницы с помощью функции поиска
- 18. Разбиение страницы с помощью json в WordPress
- 19. Разбиение страницы с помощью поиска в codeigniter
- 20. JavaScript - разбиение на страницы с помощью JSON
- 21. Разбиение страницы с помощью LINQ to SQL
- 22. Codeigniter - разбиение на страницы с помощью поиска
- 23. Разбиение страницы с помощью шаблона страницы в Plone
- 24. Спящий режим: разбиение на страницы с помощью setFirstResult и setMaxResult
- 25. Разбиение страницы с использованием Javascript
- 26. Разбиение страницы на запрос
- 27. PHP разбиение на страницы с лимитом страницы
- 28. Разбиение страницы с меняющимся контентом
- 29. Разбиение страницы на товар страницы
- 30. Разбиение страницы на статические страницы
Пожалуйста, разместите код, который вызывает проблему. –
Почему бы вам не использовать сеансы для хранения? –