10
votes

Définir l'ordre d'une liste

J'ai le problème suivant. J'ai trois classes, A, B et C. A contient une liste de B: s: S. B contient une relation de plusieurs-éléments à C. C contient un champ appelé "nom" et B contient également un champ appelé "nom". Ce que j'aimerais accomplir, c'est avoir les éléments de la liste des articles triés principalement par le nom de C et le nom de B de B - Le problème est que je ne sais pas comment faire cela. Est-ce même possible?

J'utilise Eclipselink comme fournisseur de JPA. xxx

éditer Oui, j'ai essayé différentes variations, par exemple @orderby ("C.Name") ne fonctionne pas, je viens d'obtenir un message d'erreur me disant que la classe d'entité B ne contient pas de champ appelé "C.Name".


0 commentaires

5 Réponses :


0
votes

Avez-vous essayé @orderby ("c.name", "nom") ?

Vous ne devriez pas utiliser "b." Parce qu'il est implici que le @orderby sera effectué sur des colonnes des instances de B sur le tableau B.


0 commentaires

0
votes

Avez-vous essayé:

 @OrderBy("c.name ASC", "name ASC")


0 commentaires

13
votes

Ce n'est pas possible. @Orderby n'accepte que les noms de propriété directe / de champs, pas de propriétés imbriquées. Ce qui a du sens, vraiment, parce que la table "C" - selon votre stratégie de récupération peut même ne pas faire partie d'une sélection émise pour extraire votre "B" S.


0 commentaires

3
votes

CHSSPLY76 a raison.

Ce que vous pouviez faire est de créer une requête nommée comme celle-ci: xxx


0 commentaires

0
votes

Il n'est pas possible dans javax.persistence.ordorderby (comme dites CHSSPLY76), mais quand j'utilisais Hibernate, je construisiez une nouvelle colonne dans la plaine SQL avec formule () Annotation, puis Ordonnez-vous:

class A {
   @OneToMany
   @OrderBy("orderCol") <---- reference to virtual column
   List<B> b;
}

class B {
   @ManyToOne
   C c;
   String name;

   @org.hibernate.annotations.Formula(
     "( select C_table.name as orderCol from C_table where C_table.id = id )"
   ) <------------------------------------------ join with plain SQL statment
   String orderCol;
}


0 commentaires