Разница между @OneToMany и @ElementCollection?


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

5 85

5 ответов:

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

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

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

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

@ElementCollection позволяет упростить код, когда вы хотите реализовать связь "один ко многим" с простым или встроенным типом. Например, в JPA 1.0, когда вы хотели иметь отношение "один ко многим" к списку Strings, Вы должны были создать простой объект 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 Примечание.

Читайте также:

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

основной или встроенный: @ElementCollection
объекты: @OneToMany или @ManyToMany

@ElementCollection:

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

@OneToMany / @ManyToMany:

  • может также управляться другим сущность
  • таблица соединений или столбцы обычно содержат только ссылки на идентификаторы