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