Я хочу спросить, если критерии setFirstResult и setMaxResults может помешать Приказа я применяю перед использованием обоих методов. Я заметил, что когда addOrder в поле, результаты, если какие-либо повторяемые этим полем сортируются по идентификатору записей. Если я применяю setFirstResult, setMaxResults по критериям после заказа, то же результаты сортируются по тому, как они были сохранены.Hibernate Критерии - Заказ и Pagination
ответ
Результаты, если они повторяются этим полем, сортируются по идентификатору записей.
На основании вышеприведенного утверждения, мое основное предположение/интерпретация является то, что вы имеете в виду сценарий, в котором вы подаете addOrder
на поле/столбец, который имеет дублируют/те же значения (столбец с неоднородными значениями).
Я пробовал пример кода и заметил, что SQL, который сгенерирован, одинаковый в обоих случаях. (addOrder
указан до или после setFirst/MaxResults
).
Hibernate: select this_.id as id1_0_0_, this_.name as name2_0_0_, this_.version as version3_0_0_ from SimplePost this_ order by this_.name asc limit ?
Я заметил, что когда addingOrder на поле, результаты, если любой повторенной этой области сортируются по идентификатору записей. Если я применил setFirstResult, setMaxResults по критериям после заказа, то такие же результаты сортируются по тому, как они были сохранены.
выше два утверждение также не гарантируется, , если лежащий в основе базы данных не гарантирует, что он возвращает строки того же порядка, даже если отсортировано по неуникальными значений столбцов. См. Приведенный ниже вывод.
ПРИМЕЧАНИЕ: Я тестировал базу данных с памятью Hibernate5 и h2. И порядок вставок одинаковый для нескольких прогонов.
С addOrder после setMaxResults, запрос используется:
session1.createCriteria(OrderByPost.class).setFirstResult(0).setMaxResults(3).addOrder(Order.asc("name")).list()
Результаты:
[Post [id=1, name=Apost], Post [id=3, name=Bpost], Post [id=6, name=Bpost]]
[Post [id=1, name=Apost], Post [id=4, name=Bpost], Post [id=6, name=Bpost]]
[Post [id=1, name=Apost], Post [id=2, name=Bpost], Post [id=6, name=Bpost]]
[Post [id=1, name=Apost], Post [id=3, name=Bpost], Post [id=6, name=Bpost]]
[Post [id=1, name=Apost], Post [id=4, name=Bpost], Post [id=6, name=Bpost]]
С addOrder Перед setFirstResult, запрос используется:
session1.createCriteria(OrderByPost.class).addOrder(Order.asc("name")).setFirstResult(0).setMaxResults(3).list()
Результаты:
[Post [id=1, name=Apost], Post [id=3, name=Bpost], Post [id=6, name=Bpost]]
[Post [id=1, name=Apost], Post [id=6, name=Bpost], Post [id=4, name=Bpost]]
[Post [id=1, name=Apost], Post [id=6, name=Bpost], Post [id=4, name=Bpost]]
[Post [id=1, name=Apost], Post [id=3, name=Bpost], Post [id=6, name=Bpost]]
[Post [id=1, name=Apost], Post [id=6, name=Bpost], Post [id=4, name=Bpost]]
[Post [id=1, name=Apost], Post [id=6, name=Bpost], Post [id=4, name=Bpost]]
Я думаю, что если вы запустите его пару раз вы могли бы видеть, что порядок не гарантируется, даже если мы не будем менять addOrder(..)
метод относительно setFirst/MaxResults
.
Исходя из вышеприведенных наблюдений, я считаю, что когда мы укажем addOrder
на поле, все, что hibernate гарантирует, результаты сортируются по этому полю.
И если это поле/столбец имеет одинаковые значения для некоторых строк, hibernate не гарантирует, что мы будем получать эти строки в одном порядке для нескольких исполнений.
Один из вариантов, чтобы гарантировать, что мы получаем результаты в том же порядке, каждый раз, если мы приказывать на поле/колонки, которые могут иметь дублирующие/одинаковые значения, чтобы добавить еще один addOrder
на каком-то уникальном поле, скажем id
, как показано ниже :
session1.createCriteria(OrderByPost.class).setFirstResult(0).setMaxResults(7).addOrder(Order.asc("name")).addOrder(Order.asc("id")).list()
Кстати, дайте мне знать, если я получил мое основное предположение/толкование самого неправильно, что я надеюсь, что нет.
- 1. Hibernate Поиск и Hibernate Критерии
- 2. критерии Hibernate и компаратор
- 3. Критерии - Hibernate и вебсервис
- 4. Hibernate Критерии и статистика
- 5. Hibernate Критерии - Сортировать по
- 6. DisplayTag pagination vs Hibernate Pagination
- 7. Hibernate критерии Java аннотаций
- 8. Критерии Hibernate API
- 9. Hibernate Наследование запросов (критерии)
- 10. Hibernate Критерии запроса API
- 11. Hibernate Критерии с автообъединение
- 12. Критерии вложенности свойств Hibernate
- 13. Hibernate пользовательский заказ и java.text.Collator
- 14. критерии Hibernate обобщающие
- 15. Hibernate Критерии, играя, или
- 16. Hibernate Критерии несколько таблиц
- 17. критерии Hibernate подкласс атрибута
- 18. ява критерии Hibernate ошибки
- 19. Hibernate критерии двойного уровня
- 20. Hibernate pagination with ____ToMany mapping
- 21. критерии Hibernate с EmbeddedId
- 22. Hibernate Критерии подзапросов
- 23. Hibernate Критерии списка
- 24. Hibernate Критерии Api Multiselect
- 25. Hibernate Критерии «в подвыборках»
- 26. Hibernate Критерии экспрессии
- 27. Функция внутри Hibernate Критерии
- 28. Hibernate Критерии API отключить
- 29. критерии Hibernate вопрос
- 30. Grails (Hibernate) Критерии запрос
Пожалуйста, разместите код и соответствующие сопоставления спящего режима. –
'Order By' применяется только последним. Таким образом, ограниченный результат упорядочен. Это ожидаемое поведение –