@OneToMany List <> vs Set <> разница - PullRequest
86 голосов
/ 03 июля 2011

Есть ли какая-либо разница, если я использую

@OneToMany
public Set<Rating> ratings;

или если я использую

@OneToMany
public List<Rating> ratings;

, оба работают нормально, я знаю разницу между списком и набором, однако не знаюзнать, имеет ли это какое-то значение, как Hibernate (или, скорее, JPA 2.0) обрабатывает его.

Ответы [ 2 ]

102 голосов
/ 03 июля 2011

Список, если не указан индексный столбец, будет просто обработан Hibernate как пакет (без определенного порядка).

Одно заметное отличие в обработке Hibernate заключается в том, что вы не можете получить два разных списка в одном запросе.Например, если у вас есть объект Person, имеющий список контактов и список адресов, вы не сможете использовать один запрос для загрузки людей со всеми их контактами и всеми их адресами.Решение в этом случае состоит в том, чтобы сделать два запроса (что исключает декартово произведение) или использовать Set вместо List как минимум для одной из коллекций.

Часто сложно использоватьУстанавливается с Hibernate, когда вам нужно определить equals и hashCode для сущностей и не иметь неизменного функционального ключа в сущности.

29 голосов
/ 03 июля 2011

Если вы используете List, то вы можете указать предложение Order BY в функции getter.Вы не можете сделать это с помощью набора.Предложение order by может содержать частичный EJBQL;Например,

@OneToMany
@OrderBy("lastname ASC")
public List<Rating> ratings;

Если вы оставите это поле пустым, список будет отсортирован в порядке возрастания на основе значения первичного ключа.

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