Использование Hibernate setFirstResult без упорядочения

Я новичок в спящем режиме. Меня смущает метод setFirstResult критериев. Из документации кажется, что hibernate возвращает строки из заданного числа.

Поскольку запрос SQL не гарантирует упорядочение строк без предложения order by, как в этом случае работает setFirstQuery (без предложения orderBy)? Считывает ли hibernate информацию индекса из базы данных?

Если я выполняю один и тот же SQL-запрос несколько раз, порядок может измениться, в этом случае как работает setFirstResult?


person Htaras    schedule 10.10.2012    source источник


Ответы (2)


Hibernate не может что-то делать сам по себе, если он не поддерживается базовыми базами данных. Потому что запросы Hibernate в конечном итоге преобразуются только в Sql.

Сказав, что он использует базовые возможности баз данных, такие как PostgresSQL и MySQL, он будет генерировать запрос типа limit ? offset ? .

Вы можете добавить индивидуальный заказ, используя addOrder

.addOrder( Order.asc("name") )
person Amit Deshpande    schedule 10.10.2012
comment
Часть о том, что по умолчанию это будет Order By для первичного ключа, здесь неточна. Hibernate не добавляет неявного порядка, и порядок возвращаемых результатов полностью зависит от базовой базы данных. - person Steve Ebersole; 10.10.2012
comment
Я знаю о PostgreSQL и MySQL, что он использует Limit и offset, но в отсутствие их, т.е. База данных Oracle, что она использует? - person Amit Deshpande; 10.10.2012

Это ваша задача добавить порядок, функция, как вы заметили, не гарантирует одинаковых результатов, если выполняется несколько раз над одним и тем же набором данных. setFirstResult обычно используется при нумерации страниц.

person David Bejar    schedule 10.10.2012