Jaka jest różnica między używaniem adnotacji @OneToMany
a @ElementCollection
adnotacją, skoro oba działają w relacji jeden do wielu?
Jaka jest różnica między używaniem adnotacji @OneToMany
a @ElementCollection
adnotacją, skoro oba działają w relacji jeden do wielu?
Odpowiedzi:
Uważam, że @ElementCollection
służy głównie do mapowania jednostek niebędących podmiotami (osadzanymi lub podstawowymi), podczas gdy @OneToMany
jest używany do mapowania jednostek. Więc którego użyć, zależy od tego, co chcesz osiągnąć.
ElementCollection
to standardowa adnotacja JPA, która jest obecnie preferowana w stosunku do zastrzeżonej adnotacji Hibernate CollectionOfElements
.
Oznacza to, że kolekcja nie jest zbiorem jednostek, ale zbiorem prostych typów (ciągów znaków itp.) Lub zbiorem elementów do osadzania (klasa z adnotacją @Embeddable
).
Oznacza to również, że elementy są całkowicie własnością jednostek zawierających je: są modyfikowane, gdy jednostka jest modyfikowana, usuwane, gdy jednostka jest usuwana, itp. Nie mogą mieć własnego cyklu życia.
@ElementCollection
pozwala uprościć kod, gdy chcesz zaimplementować relację jeden do wielu z typem prostym lub osadzonym. Na przykład w JPA 1.0, gdy chciałeś mieć relację jeden do wielu z listą String
s, musiałeś utworzyć prostą jednostkę POJO ( StringWrapper
) zawierającą tylko klucz podstawowy i String
pytanie:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Dzięki JPA 2.0 możesz po prostu napisać:
@ElementCollection
private Collection<String> strings;
Prostsze, prawda? Pamiętaj, że nadal możesz sterować nazwami tabel i kolumn za pomocą @CollectionTable
adnotacji.
Podstawowe lub osadzone : @ElementCollection
Entities : @OneToMany lub @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection może przesłonić mapowania lub tabelę dla ich kolekcji, dzięki czemu wiele jednostek może odwoływać się do tej samej klasy osadzanej, ale każda z nich przechowuje swoje zależne obiekty w oddzielnej tabeli.