ambos funcionan bien, conozco la diferencia entre la lista y un conjunto, sin embargo, no sé si esto hace alguna diferencia en cómo lo maneja Hibernate (o más bien JPA 2.0).
Una lista, si no hay una columna de índice especificada, solo será manejada como una bolsa por Hibernate (sin orden específico).
Una diferencia notable en el manejo de Hibernate es que no puede buscar dos listas diferentes en una sola consulta. Por ejemplo, si tiene una Personentidad 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 a en Setlugar de a Listpara al menos una de las colecciones.
A menudo es difícil usar Conjuntos con Hibernate cuando tienes que definir equalsy hashCodeen las entidades y no tienes una clave funcional inmutable en la entidad.
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
Dado que me envió a buscar mis documentos de Hibernate: puede@Sort un conjunto, solo use SortedSetcomo se explica en los documentos .
mabi
pero si usa SortedSet, se ordena con el comparador, no hay forma de ordenarlo por el "orden por" de la base de datos.
samir105
Como es una respuesta antigua, me gustaría aclararla. Actualmente podemos usar @OrderByen Set. Debajo, Hibernate usará OrderedSetTypeque instanciará a LinkedHashSet, por lo que el orden se conserva. Además, sugeriría usarlo LinkedHashSeten entidad, por razones de coherencia. Fuente: speech.hibernate.org/t/…
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
Si deja este campo en blanco, la lista se clasifica en orden ascendente según el valor de la clave principal.
fuente
@Sort
un conjunto, solo useSortedSet
como se explica en los documentos .@OrderBy
enSet
. Debajo, Hibernate usaráOrderedSetType
que instanciará aLinkedHashSet
, por lo que el orden se conserva. Además, sugeriría usarloLinkedHashSet
en entidad, por razones de coherencia. Fuente: speech.hibernate.org/t/…