Krótko mówiąc, @ElementCollection jest używane, gdy istnienie podmiotu podrzędnego jest bez znaczenia bez podmiotu nadrzędnego, IOW, za każdym razem, gdy podmiot nadrzędny zostanie usunięty, twoje dzieci również będą ...
dellasavia
1
Uważam, że NIE jest to jednostka potomna, ale typ wartości / obiekt wartości, który jest osadzony i którego istnienie ma mniejsze znaczenie bez jednostki głównej, w której się znajduje.
CuriousMind
zgadzam się z @CuriousMind, w JPA „Entity” ma swój własny cykl życia.
mhrsalehi
Odpowiedzi:
124
Uważam, że @ElementCollectionsłuży głównie do mapowania jednostek niebędących podmiotami (osadzanymi lub podstawowymi), podczas gdy @OneToManyjest używany do mapowania jednostek. Więc którego użyć, zależy od tego, co chcesz osiągnąć.
Dzięki Peder za odpowiedź! Masz ważny punkt, ponieważ @OneToMany może odnosić się tylko do jednostek.
n_g
157
ElementCollectionto 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.
@ElementCollectionpozwala 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ą Strings, musiałeś utworzyć prostą jednostkę POJO ( StringWrapper) zawierającą tylko klucz podstawowy i Stringpytanie:
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.
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ąć.źródło
ElementCollection
to standardowa adnotacja JPA, która jest obecnie preferowana w stosunku do zastrzeżonej adnotacji HibernateCollectionOfElements
.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.
źródło
@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 iString
pytanie:Dzięki JPA 2.0 możesz po prostu napisać:
Prostsze, prawda? Pamiętaj, że nadal możesz sterować nazwami tabel i kolumn za pomocą
@CollectionTable
adnotacji.Zobacz też:
źródło
Podstawowe lub osadzone : @ElementCollection
Entities : @OneToMany lub @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
źródło
@ElementCollection
oznacza kolekcję. Nie musi to oznaczać, że ta kolekcja odwołuje się do złączenia 1-n.źródło
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.
źródło