Question

Donc si ma requête JPA ressemble à ceci: Sélectionnez p distinct de Parent p gauche rejoindre chercher fetch p.children commande par p.someProperty

Je récupère correctement les résultats en ordre ordonné par p.someProperty, et ma collection p.children est correctement récupérée et remplie. Mais j'aimerais que ma requête soit quelque chose comme "commande par p.someProperty, p.children.someChildProperty". afin que la collection remplie à l'intérieur de chaque objet parent soit sous-ordonnée par someChildProperty.

Cela semble intuitif quand je pense au SQL qui est réellement généré pour ces appels, mais je le pense moins quand il essaie de mapper vers des objets hiérarchiques.

Était-ce utile?

La solution

Pour préserver l'ordre, utilisez TreeSet . . En ce qui concerne le tri d'une collection dans le parent, faites-le dans votre code en utilisant Comparateur .

Essayez ceci sur la définition de votre collection dans votre classe d'entité parent. J'espère que vous obtenez mon point.

Vous pouvez utiliser cette annotation JPA,

@javax.persistence.OrderBy(value = "fieldName")

ou ce spécifique à Hibernate,

@org.hibernate.annotations.OrderBy(clause = "FIELD_NAME asc")

et vous pouvez également l'utiliser,

@org.hibernate.annotations.Sort(type = SortType.NATURAL)

ou

@org.hibernate.annotations.Sort(type = SortType.COMPARATOR)

Dans le cas du comparateur, un comparateur doit être en place. D'autres peuvent uniquement fonctionner avec des collections String.

Autres conseils

Adeel a fondamentalement ceci cloué. Vous pouvez également utiliser ceux avec une liste qui pourraient être importants si vos collections contiennent plusieurs fois la même entité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top