web-dev-qa-db-fra.com

Annotation JPA / Hibernate @OrderBy avec plusieurs colonnes et ASC / DESC pour chacune

Je voudrais trier un champ OneToMany avec l'annotation @OrderBy avec plusieurs colonnes et spécifier l'ordre de tri pour chacune, mais je n'arrive pas à trouver les informations n'importe où sur la façon de faire ou si c'est impossible. Les spécifications de l'annotation indiquent:

orderby_list::= orderby_item [,orderby_item]*
orderby_item::= property_or_field_name [ASC | DESC]

donc je suppose que ce n'est pas possible mais je préfère demander quand même.

Mettre ce qui suit lève une HibernateException lors du déploiement:

@OrderBy("field1 DESC, field2 DESC, field3 DESC, field4 DESC")

Générer:

Caused by: org.hibernate.HibernateException: Unable to parse order-by fragment

Merci

10
Sandy

Si vous avez une classe Person avec 2 champs, firstName et lastName alors avec une requête vous pouvez faire

SELECT p FROM Person p ORDER BY p.firstName ASC, p.lastName DESC

c'est ce que dit le JPQL BNF.

En termes de quand vous avez une liste d'objets Person, vous pouvez définir l'ordre des listes comme ceci (même syntaxe)

@OneToMany
@OrderBy("firstName ASC, lastName DESC")
List<Person> myList;
17
Neil Stockton