Was ist der Unterschied zwischen der Verwendung von a @OneToMany
und @ElementCollection
Annotation, da beide an der Eins-zu-Viele-Beziehung arbeiten?
Was ist der Unterschied zwischen der Verwendung von a @OneToMany
und @ElementCollection
Annotation, da beide an der Eins-zu-Viele-Beziehung arbeiten?
Antworten:
Ich glaube, es @ElementCollection
ist hauptsächlich für die Zuordnung von Nicht-Entitäten (einbettbar oder einfach) gedacht, während @OneToMany
es für die Zuordnung von Entitäten verwendet wird. Welche Sie verwenden, hängt davon ab, was Sie erreichen möchten.
ElementCollection
ist eine Standard-JPA-Annotation, die jetzt der proprietären Hibernate-Annotation vorgezogen wird CollectionOfElements
.
Dies bedeutet, dass die Sammlung keine Sammlung von Entitäten ist, sondern eine Sammlung einfacher Typen (Strings usw.) oder eine Sammlung einbettbarer Elemente (mit Anmerkungen versehene Klasse @Embeddable
).
Dies bedeutet auch, dass die Elemente vollständig im Besitz der enthaltenen Entitäten sind: Sie werden geändert, wenn die Entität geändert wird, gelöscht, wenn die Entität gelöscht wird usw. Sie können keinen eigenen Lebenszyklus haben.
@ElementCollection
Mit dieser Option können Sie Code vereinfachen, wenn Sie eine Eins-zu-Viele-Beziehung mit einem einfachen oder eingebetteten Typ implementieren möchten. Wenn Sie beispielsweise in JPA 1.0 eine Eins-zu-Viele-Beziehung zu einer Liste von String
s haben möchten, müssen Sie eine einfache Entität POJO ( StringWrapper
) erstellen, die nur den Primärschlüssel und die String
fraglichen Elemente enthält :
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Mit JPA 2.0 können Sie einfach schreiben:
@ElementCollection
private Collection<String> strings;
Einfacher, nicht wahr? Beachten Sie, dass Sie die Tabellen- und Spaltennamen weiterhin mit steuern können@CollectionTable
Anmerkungen .
Grundlegend oder eingebettet : @ElementCollection-
Entitäten : @OneToMany oder @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection kann die Zuordnungen oder Tabellen für ihre Auflistung überschreiben, sodass mehrere Entitäten auf dieselbe Embeddable-Klasse verweisen können, die abhängigen Objekte jedoch jeweils in einer separaten Tabelle gespeichert werden.