@OneToMany List vs Set différence

Y a-t-il une différence si j’utilise

@OneToMany public Set ratings; 

ou si j’utilise

 @OneToMany public List ratings; 

Les deux fonctionnent correctement, je connais la différence entre une liste et un ensemble, mais je ne sais pas si cela fait une différence sur la manière dont la mise en veille prolongée (ou plutôt JPA 2.0) la 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 extraire deux listes différentes dans une même requête. Par exemple, si vous avez une entité Person 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 un Set au lieu d’une List pour au moins une des collections.

Il est souvent difficile d’utiliser Sets with Hibernate lorsque vous devez définir des equals et hashCode sur 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 set. La clause order by peut contenir une EJBQL partielle; Par exemple

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

Si vous laissez ce champ vide, la liste est sortingée par ordre croissant en fonction de la valeur de la clé primaire.