¿Cuál es la diferencia entre usar una @OneToMany
y @ElementCollection
anotación ya que tanto el trabajo en la relación de uno a muchos?
¿Cuál es la diferencia entre usar una @OneToMany
y @ElementCollection
anotación ya que tanto el trabajo en la relación de uno a muchos?
Respuestas:
Creo que @ElementCollection
es principalmente para mapear no entidades (integrables o básicas) mientras @OneToMany
se usa para mapear entidades. Entonces, cuál usar depende de lo que quieras lograr.
ElementCollection
es una anotación JPA estándar, que ahora se prefiere sobre la anotación patentada de Hibernate CollectionOfElements
.
Significa que la colección no es una colección de entidades, sino una colección de tipos simples (Strings, etc.) o una colección de elementos incrustables (clase anotada con @Embeddable
).
También significa que los elementos son propiedad exclusiva de las entidades que los contienen: se modifican cuando se modifica la entidad, se eliminan cuando se elimina la entidad, etc. No pueden tener su propio ciclo de vida.
@ElementCollection
le permite simplificar el código cuando desea implementar una relación de uno a muchos con un tipo simple o incrustado. Por ejemplo, en JPA 1.0 cuando deseaba tener una relación uno a muchos con una lista de String
s, tenía que crear una entidad simple POJO ( StringWrapper
) que contenía solo la clave primaria y la String
pregunta:
@OneToMany
private Collection<StringWrapper> strings;
//...
public class StringWrapper {
@Id
private int id;
private String string;
}
Con JPA 2.0 puedes simplemente escribir:
@ElementCollection
private Collection<String> strings;
Más simple, ¿no? Tenga en cuenta que aún puede controlar los nombres de tabla y columna mediante @CollectionTable
anotaciones.
Básico o integrado : @ElementCollection
Entidades : @OneToMany o @ManyToMany
@ElementCollection:
@OneToMany / @ManyToMany:
ElementCollection puede anular las asignaciones o la tabla para su colección, por lo que puede hacer que varias entidades hagan referencia a la misma clase Embeddable, pero que cada una almacene sus objetos dependientes en una tabla separada.