java - one - jpa bidirectional relationship



@OneToMany List<> vs Set<> разница (2)

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

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

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

https://src-bin.com

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

@OneToMany
public Set<Rating> ratings;

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

@OneToMany
public List<Rating> ratings;

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


Answer #1

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

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

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





jpa