Список, если не указан столбец индекса, будет обрабатываться Hibernate как мешок (без определенного порядка).
Одно заметное отличие в обработке Hibernate заключается в том, что вы не можете получить два разных списка в одном запросе. Например, если у вас есть Person
организация, имеющая список контактов и список адресов, вы не сможете использовать один запрос для загрузки лиц со всеми их контактами и всеми адресами. Решение в этом случае состоит в том, чтобы сделать два запроса (что позволяет избежать декартова произведения) или использовать a Set
вместо a List
хотя бы для одной из коллекций.
Часто бывает сложно использовать Sets с Hibernate, когда вам нужно определить equals
и hashCode
для сущностей, и у них нет неизменяемого функционального ключа в сущности.
Если вы используете List, вы можете указать предложение Order BY в функции получения. Вы не можете сделать этого с Сетом. Предложение order by может содержать частичный EJBQL; Например
Если вы оставите это поле пустым, то список будет отсортирован в возрастающем порядке на основе значения первичного ключа.
источник
@Sort
установить - просто используйте,SortedSet
как описано в документации .@OrderBy
наSet
. Ниже будет использоваться Hibernate,OrderedSetType
который будет создавать экземплярLinkedHashSet
, поэтому порядок сохраняется. Дополнительно я бы предложил использоватьLinkedHashSet
в сущности - для единообразия. Источник: discourse.hibernate.org/t/…