Quelle est la différence entre l'utilisation de a @OneToMany
et d' @ElementCollection
annotation puisque les deux fonctionnent sur la relation un-à-plusieurs?
Quelle est la différence entre l'utilisation de a @OneToMany
et d' @ElementCollection
annotation puisque les deux fonctionnent sur la relation un-à-plusieurs?
Réponses:
Je crois que @ElementCollection
c'est principalement pour mapper des non-entités (intégrables ou basiques) alors qu'il @OneToMany
est utilisé pour mapper des entités. Alors, lequel utiliser dépend de ce que vous voulez réaliser.
ElementCollection
est une annotation JPA standard, qui est désormais préférée à l'annotation propriétaire Hibernate CollectionOfElements
.
Cela signifie que la collection n'est pas une collection d'entités, mais une collection de types simples (Strings, etc.) ou une collection d'éléments intégrables (classe annotée avec @Embeddable
).
Cela signifie également que les éléments appartiennent entièrement aux entités qui les contiennent: ils sont modifiés lorsque l'entité est modifiée, supprimés lorsque l'entité est supprimée, etc. Ils ne peuvent pas avoir leur propre cycle de vie.
@ElementCollection
vous permet de simplifier le code lorsque vous souhaitez implémenter une relation un-à-plusieurs avec un type simple ou incorporé. Par exemple, dans JPA 1.0, lorsque vous vouliez avoir une relation un-à-plusieurs avec une liste de String
s, vous deviez créer une simple entité POJO ( StringWrapper
) contenant uniquement la clé primaire et l'élément String
en question:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Avec JPA 2.0, vous pouvez simplement écrire:
@ElementCollection
private Collection<String> strings;
Plus simple, non? Notez que vous pouvez toujours contrôler les noms de table et de colonne à l'aide d' @CollectionTable
annotations.
Basique ou intégrée :
Entités @ElementCollection: @OneToMany ou @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection peut remplacer les mappages ou la table pour leur collection, de sorte que plusieurs entités peuvent référencer la même classe Embeddable, mais que chacune stocke ses objets dépendants dans une table distincte.