Подтвердить что ты не робот

@OneToMany Список <> vs Установить <> разность

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

@OneToMany
public Set<Rating> ratings;

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

@OneToMany
public List<Rating> ratings;

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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