Risposte:
Un elenco, se non è specificata una colonna indice, verrà gestito come un sacchetto da Hibernate (nessun ordine specifico).
Una differenza notevole nella gestione di Hibernate è che non è possibile recuperare due elenchi diversi in una singola query. Ad esempio, se hai Person
un'entità con un elenco di contatti e un elenco di indirizzi, non sarai in grado di utilizzare una singola query per caricare le persone con tutti i loro contatti e tutti i loro indirizzi. La soluzione in questo caso è fare due interrogazioni (che evita il prodotto cartesiano), oppure usare a Set
invece di a List
per almeno una delle collezioni.
Spesso è difficile usare Set con Hibernate quando devi definire equals
e hashCode
sulle entità e non hai una chiave funzionale immutabile nell'entità.
Se utilizzi un elenco, puoi specificare una clausola "Order BY" nella funzione getter. Non puoi farlo con un set. La clausola order by può contenere EJBQL parziale; Per esempio
@OneToMany
@OrderBy("lastname ASC")
public List<Rating> ratings;
Se lasci vuoto questo campo, l'elenco viene ordinato in ordine crescente in base al valore della chiave primaria.
@Sort
un set - basta usare SortedSet
come spiegato nei documenti .
@OrderBy
su Set
. Sotto, Hibernate userà OrderedSetType
che istanzerà un LinkedHashSet
, quindi l'ordine è preservato. Inoltre suggerirei di utilizzare LinkedHashSet
in entità - per motivi di coerenza. Fonte: discourse.hibernate.org/t/…