unidirectional onetomany one many ejemplo java jpa

java - ejemplo - @OneToMany List<> vs Set<> difference



onetomany jpa bidirectional (2)

Si usa una lista, puede especificar una cláusula ''Order BY'' en la función getter. No puedes hacer eso con un Set. La cláusula order by puede contener EJBQL parcial; Por ejemplo

@OneToMany @OrderBy("lastname ASC") public List<Rating> ratings;

Si deja este campo en blanco, la lista se ordena en orden ascendente según el valor de la clave principal.

¿Hay alguna diferencia si uso

@OneToMany public Set<Rating> ratings;

o si uso

@OneToMany public List<Rating> ratings;

ambos funcionan bien, sé la diferencia entre la lista y un conjunto, sin embargo, no sé si esto hace alguna diferencia cómo lo maneja la hibernación (o más bien JPA 2.0).


Una lista, si no hay una columna de índice especificada, será manejada como una bolsa por Hibernate (sin pedidos específicos).

Una diferencia notable en el manejo de Hibernate es que no puede obtener dos listas diferentes en una sola consulta. Por ejemplo, si tiene una entidad Person que tiene una lista de contactos y una lista de direcciones, no podrá usar una sola consulta para cargar personas con todos sus contactos y todas sus direcciones. La solución en este caso es realizar dos consultas (lo que evita el producto cartesiano), o utilizar un Set lugar de una List para al menos una de las colecciones.

A menudo es difícil usar Sets with Hibernate cuando se deben definir equals y hashCode en las entidades y no tener una clave funcional inmutable en la entidad.