@OneToMany List vs Set difference
есть ли разница, если я использую
@OneToMany
public Set<Rating> ratings;
или если я использую
@OneToMany
public List<Rating> ratings;
оба работают нормально, я знаю разницу между списком и набором, однако я не знаю, имеет ли это какое-либо значение, как hibernate (или, скорее, JPA 2.0) обрабатывает его.
2 ответа:
список, если нет указанного столбца индекса, будет просто обрабатываться как мешок Hibernate (без конкретного заказа).
одно заметное различие в обработке Hibernate заключается в том, что вы не можете получить два разных списка в одном запросе. Например, если у вас есть
Person
сущность имея список контактов и список адресов, вы не сможете использовать один запрос для загрузки людей со всеми их контактами и всеми их адресами. Решение в этом случае состоит в том, чтобы сделать два запросы (что позволяет избежать декартова произведения), или использоватьSet
вместоList
по крайней мере одной из коллекций.часто трудно использовать наборы с гибернацией, когда вам нужно определить
equals
иhashCode
на сущностях и не имеют неизменяемого функционального ключа в сущности.
Если вы используете список, то вы можете указать предложение "Order BY" в функции getter. Вы не можете сделать это с набором. Предложение order by может содержать частичный EJBQL; например
@OneToMany @OrderBy("lastname ASC") public List<Rating> ratings;
Если вы оставите это поле пустым, то список сортируется в порядке возрастания по значению первичного ключа.