Короче говоря, @ElementCollection используется, когда существование дочернего объекта бессмысленно без родительского объекта, IOW, всякий раз, когда родительский объект удаляется, ваши дети также будут ...
dellasavia
1
Я считаю, что это НЕ дочерняя сущность, это встроенный тип значения / объект значения, существование которого имеет меньшее значение без основной сущности, в которой он содержится.
CuriousMind
согласен с @CuriousMind, в JPA «Сущность» имеет свой собственный жизненный цикл.
mhrsalehi
Ответы:
125
Я считаю, что @ElementCollectionэто в основном для отображения не-сущностей (встраиваемых или базовых), а @OneToManyиспользуется для сопоставления сущностей. Итак, какой из них использовать, зависит от того, чего вы хотите достичь.
Спасибо Peder за ответ! У вас есть верная точка зрения, поскольку @OneToMany может связывать только сущности.
n_g
157
ElementCollection- это стандартная аннотация JPA, которая теперь предпочтительнее проприетарной аннотации Hibernate CollectionOfElements.
Это означает, что коллекция - это не набор сущностей, а набор простых типов (строки и т. Д.) Или набор встраиваемых элементов (класс, помеченный @Embeddable).
Это также означает, что элементы полностью принадлежат содержащим сущностям: они модифицируются при изменении сущности, удаляются при удалении сущности и т. Д. У них не может быть собственного жизненного цикла.
@ElementCollectionпозволяет упростить код, если вы хотите реализовать отношение «один ко многим» с помощью простого или встроенного типа. Например, в JPA 1.0, когда вы хотели иметь отношение «один ко многим» со списком Strings, вам нужно было создать простую сущность POJO ( StringWrapper), содержащую только первичный ключ и рассматриваемый String:
ElementCollection может переопределять сопоставления или таблицу для их коллекции, поэтому вы можете иметь несколько сущностей, ссылающихся на один и тот же класс Embeddable, но каждая из них хранит свои зависимые объекты в отдельной таблице.
Ответы:
Я считаю, что
@ElementCollection
это в основном для отображения не-сущностей (встраиваемых или базовых), а@OneToMany
используется для сопоставления сущностей. Итак, какой из них использовать, зависит от того, чего вы хотите достичь.источник
ElementCollection
- это стандартная аннотация JPA, которая теперь предпочтительнее проприетарной аннотации HibernateCollectionOfElements
.Это означает, что коллекция - это не набор сущностей, а набор простых типов (строки и т. Д.) Или набор встраиваемых элементов (класс, помеченный
@Embeddable
).Это также означает, что элементы полностью принадлежат содержащим сущностям: они модифицируются при изменении сущности, удаляются при удалении сущности и т. Д. У них не может быть собственного жизненного цикла.
источник
@ElementCollection
позволяет упростить код, если вы хотите реализовать отношение «один ко многим» с помощью простого или встроенного типа. Например, в JPA 1.0, когда вы хотели иметь отношение «один ко многим» со спискомString
s, вам нужно было создать простую сущность POJO (StringWrapper
), содержащую только первичный ключ и рассматриваемыйString
:С JPA 2.0 вы можете просто написать:
Проще, правда? Обратите внимание, что вы по-прежнему можете управлять именами таблиц и столбцов с помощью
@CollectionTable
аннотаций.Смотрите также:
источник
Базовый или встроенный : @ElementCollection
Entities : @OneToMany или @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
источник
@ElementCollection
отмечает коллекцию. Это не обязательно означает, что эта коллекция ссылается на соединение 1-n.источник
ElementCollection может переопределять сопоставления или таблицу для их коллекции, поэтому вы можете иметь несколько сущностей, ссылающихся на один и тот же класс Embeddable, но каждая из них хранит свои зависимые объекты в отдельной таблице.
источник