Разница между @OneToMany и @ElementCollection?
в чем разница между использованием @OneToMany
и @ElementCollection
аннотация, так как оба работают над отношением один ко многим?
5 ответов:
Я считаю
@ElementCollection
в основном для отображения не-сущностей (встраиваемых или основных) в то время как@OneToMany
используется для отображения объектов. Итак, какой из них использовать, зависит от того, чего вы хотите достичь.
ElementCollection
является стандартной аннотацией JPA, которая теперь предпочтительнее собственной аннотации HibernateCollectionOfElements
.Это означает, что коллекция не коллекция, но коллекция простые типы (строки, и т. д.) или набор встраиваемых элементов (класс с аннотацией
@Embeddable
).Это также означает, что элементы полностью принадлежат содержащим их сущностям: они изменяются при изменении сущности, удаляются при изменении сущности удаленные и т. д. Они не могут иметь свой собственный жизненный цикл.
@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
Примечание.Читайте также:
@ElementCollection
знаки коллекции. Это не обязательно означает, что эта коллекция ссылается на 1-n соединение.
основной или встроенный: @ElementCollection
объекты: @OneToMany или @ManyToMany@ElementCollection:
- отношение управляется (только) сущностью, в которой это отношение определено
- таблица содержит ссылку на идентификатор объекта-владельца плюс основные или встроенные атрибуты
@OneToMany / @ManyToMany:
- может также управляться другим сущность
- таблица соединений или столбцы обычно содержат только ссылки на идентификаторы