les deux fonctionnent bien, je connais la différence entre une liste et un ensemble, mais je ne sais pas si cela fait une différence dans la façon dont hibernate (ou plutôt JPA 2.0) le gère.
Une liste, s'il n'y a pas de colonne d'index spécifiée, sera simplement traitée comme un sac par Hibernate (pas de classement spécifique).
Une différence notable dans la gestion d'Hibernate est que vous ne pouvez pas récupérer deux listes différentes en une seule requête. Par exemple, si vous avez une Personentité ayant une liste de contacts et une liste d'adresses, vous ne pourrez pas utiliser une seule requête pour charger des personnes avec tous leurs contacts et toutes leurs adresses. La solution dans ce cas est de faire deux requêtes (ce qui évite le produit cartésien), ou d'utiliser a Setau lieu de a Listpour au moins une des collections.
Il est souvent difficile d'utiliser des ensembles avec Hibernate lorsque vous devez définir equalset hashCodesur les entités et que vous n'avez pas de clé fonctionnelle immuable dans l'entité.
Si vous utilisez une liste, vous pouvez spécifier une clause 'Order BY' dans la fonction getter. Vous ne pouvez pas faire cela avec un ensemble. La clause order by peut contenir des EJBQL partiels; Par exemple
Depuis cela m'a envoyé brouiller pour mes documents Hibernate: vous pouvez@Sort un ensemble - utilisez simplement SortedSetcomme expliqué dans les documents .
mabi
mais si vous utilisez SortedSet, il trie avec un comparateur, il n'y a aucun moyen de le classer par "ordre par" de la base de données.
samir105
Puisqu'il s'agit d'une vieille réponse, je voudrais la clarifier. À l' heure actuelle , nous pouvons utiliser @OrderBysur Set. En dessous, Hibernate utilisera OrderedSetTypece qui instanciera a LinkedHashSet, donc l'ordre est préservé. De plus, je suggérerais d'utiliser LinkedHashSeten entité - pour des raisons de cohérence. Source: discourse.hibernate.org/t/…
Si vous utilisez une liste, vous pouvez spécifier une clause 'Order BY' dans la fonction getter. Vous ne pouvez pas faire cela avec un ensemble. La clause order by peut contenir des EJBQL partiels; Par exemple
Si vous laissez ce champ vide, la liste est triée par ordre croissant en fonction de la valeur de la clé primaire.
la source
@Sort
un ensemble - utilisez simplementSortedSet
comme expliqué dans les documents .@OrderBy
surSet
. En dessous, Hibernate utiliseraOrderedSetType
ce qui instanciera aLinkedHashSet
, donc l'ordre est préservé. De plus, je suggérerais d'utiliserLinkedHashSet
en entité - pour des raisons de cohérence. Source: discourse.hibernate.org/t/…