Яка різниця між використанням анотації @OneToManyта @ElementCollectionанотацією, оскільки обидві працюють на взаємовідносинах один до багатьох?
Яка різниця між використанням анотації @OneToManyта @ElementCollectionанотацією, оскільки обидві працюють на взаємовідносинах один до багатьох?
Відповіді:
Я вважаю, що @ElementCollectionце в основному для відображення сутностей (вбудованих або базових), в той час @OneToManyяк використовується для картографування сутностей. Отже, яку саме використовувати, залежить від того, чого ви хочете досягти.
ElementCollection- це стандартна анотація JPA, яка зараз є кращою перед власницькою анотацією зі сплячки CollectionOfElements.
Це означає, що колекція - це не сукупність сутностей, а колекція простих типів (Strings тощо) або колекція елементів, що вбудовуються (клас, анотований із @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примітки.
Основна або Embedded : @ElementCollection
Сутність : @OneToMany або @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany: