Разница между @OneToMany и @ElementCollection? - PullRequest
105 голосов
/ 23 января 2012

В чем разница между использованием аннотаций @OneToMany и @ElementCollection, поскольку оба работают над отношением один-ко-многим?

Ответы [ 6 ]

138 голосов
/ 23 января 2012

ElementCollection - это стандартная аннотация JPA, которая теперь предпочтительнее собственной аннотации Hibernate CollectionOfElements.

Это означает, что коллекция - это не коллекция сущностей, а коллекция простых типов (строки и т. Д.) Или коллекция встраиваемых элементов (класс, помеченный @Embeddable).

Это также означает, что элементы полностью принадлежат содержащим объектам: они изменяются при изменении объекта, удаляются при удалении объекта и т. Д. У них не может быть собственного жизненного цикла.

93 голосов
/ 23 января 2012

Я считаю, @ElementCollection в основном для отображения не-сущностей (встраиваемых или базовых), тогда как @OneToMany используется для отображения сущностей.То, какой из них использовать, зависит от того, чего вы хотите достичь.

53 голосов
/ 23 января 2012

@ElementCollection позволяет упростить код, когда вы хотите реализовать отношение «один ко многим» с простым или встроенным типом. Например, в JPA 1.0, когда вы хотели иметь отношение «один ко многим» со списком String s, вы должны были создать простой объект POJO (StringWrapper), содержащий только первичный ключ и рассматриваемый String :

@OneToMany
private Collection<StringWrapper> strings;

//...

public class StringWrapper {
  @Id
  private int id;

  private String string;
}

С JPA 2.0 вы можете просто написать:

@ElementCollection
private Collection<String> strings;

Проще, не так ли? Обратите внимание, что вы по-прежнему можете управлять именами таблиц и столбцов, используя аннотацию @CollectionTable.

Смотри также:

2 голосов
/ 31 мая 2018

Basic или Embedded : @ ElementCollection
Entities : @OneToMany или @ ManyToMany

@ ElementCollection:

  • theотношение управляется (только) объектом, в котором определено отношение
  • таблица содержит идентификационную ссылку на владелец объекта плюс базовые или встроенные атрибуты

@ OneToMany / @ManyToMany:

  • также может управляться другим объектом
  • таблица или столбец (-и) соединения обычно содержат только ссылки на идентификаторы
1 голос
/ 23 января 2012

@ElementCollection отмечает коллекцию.Это не обязательно означает, что эта коллекция ссылается на объединение 1-n.

0 голосов
/ 25 января 2019

ElementCollection может переопределять сопоставления или таблицы для их коллекции, поэтому вы можете иметь несколько сущностей, ссылающихся на один и тот же класс Embeddable, но каждый из которых может хранить свои зависимые объекты в отдельной таблице.

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