Qual è la differenza tra l'uso di a @OneToMany
e l' @ElementCollection
annotazione poiché entrambi lavorano sulla relazione uno-a-molti?
Qual è la differenza tra l'uso di a @OneToMany
e l' @ElementCollection
annotazione poiché entrambi lavorano sulla relazione uno-a-molti?
Risposte:
Credo che @ElementCollection
sia principalmente per mappare le non entità (incorporabili o di base) mentre @OneToMany
è usato per mappare le entità. Quindi quale usare dipende da cosa vuoi ottenere.
ElementCollection
è un'annotazione JPA standard, che ora è preferita rispetto all'annotazione proprietaria Hibernate CollectionOfElements
.
Significa che la raccolta non è una raccolta di entità, ma una raccolta di tipi semplici (stringhe, ecc.) O una raccolta di elementi incorporabili (classe annotata con @Embeddable
).
Significa anche che gli elementi sono completamente di proprietà delle entità contenenti: vengono modificati quando l'entità viene modificata, eliminati quando l'entità viene eliminata, ecc. Non possono avere il proprio ciclo di vita.
@ElementCollection
consente di semplificare il codice quando si desidera implementare una relazione uno-a-molti con tipo semplice o incorporato. Ad esempio in JPA 1.0 quando volevi avere una relazione uno-a-molti con un elenco di String
s, dovevi creare una semplice entità POJO ( StringWrapper
) contenente solo la chiave primaria e la String
domanda in questione:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Con JPA 2.0 puoi semplicemente scrivere:
@ElementCollection
private Collection<String> strings;
Più semplice, no? Nota che puoi ancora controllare i nomi di tabella e colonna usando l' @CollectionTable
annotazione.
Di base o incorporato :
Entità @ElementCollection: @OneToMany o @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection può sovrascrivere i mapping o la tabella per la loro raccolta, quindi è possibile avere più entità che fanno riferimento alla stessa classe Embeddable, ma ognuno ha i propri oggetti dipendenti in una tabella separata.