ambos funcionam bem, eu sei a diferença entre a lista e um conjunto, porém não sei se isso faz alguma diferença como o hibernate (ou melhor, JPA 2.0) lida com isso.
Uma lista, se não houver uma coluna de índice especificada, será tratada como um pacote pelo Hibernate (sem ordem específica).
Uma diferença notável no manuseio do Hibernate é que você não pode buscar duas listas diferentes em uma única consulta. Por exemplo, se você tiver uma Personentidade com uma lista de contatos e uma lista de endereços, não será capaz de usar uma única consulta para carregar pessoas com todos os seus contatos e todos os seus endereços. A solução neste caso é fazer duas consultas (o que evita o produto cartesiano), ou usar a em Setvez de a Listpara pelo menos uma das coleções.
Geralmente é difícil usar Sets com Hibernate quando você precisa definir equalse hashCodenas entidades e não tem uma chave funcional imutável na entidade.
Se você usar uma lista, poderá especificar uma cláusula 'Order BY' na função getter. Você não pode fazer isso com um Set. A cláusula order by pode conter EJBQL parcial; Por exemplo
Uma vez que ele me enviou uma busca por meus documentos do Hibernate: você pode@Sort definir um conjunto - apenas use SortedSetconforme explicado nos documentos .
mabi
mas se você usar SortedSet, ele classifica com o comparador, não há como torná-lo ordenado pelo banco de dados "ordenar por".
samir105
Como é uma resposta antiga, gostaria de esclarecê-la. Atualmente, podemos usar @OrderByem Set. Abaixo, o Hibernate usará o OrderedSetTypeque irá instanciar um LinkedHashSet, então a ordem é preservada. Além disso, eu sugeriria usar LinkedHashSetem entidade - para fins de consistência. Fonte: discourse.hibernate.org/t/…
Se você usar uma lista, poderá especificar uma cláusula 'Order BY' na função getter. Você não pode fazer isso com um Set. A cláusula order by pode conter EJBQL parcial; Por exemplo
Se você deixar este campo em branco, a lista será classificada em ordem crescente com base no valor da chave primária.
fonte
@Sort
definir um conjunto - apenas useSortedSet
conforme explicado nos documentos .@OrderBy
emSet
. Abaixo, o Hibernate usará oOrderedSetType
que irá instanciar umLinkedHashSet
, então a ordem é preservada. Além disso, eu sugeriria usarLinkedHashSet
em entidade - para fins de consistência. Fonte: discourse.hibernate.org/t/…