Bonjour,
J'ai un souci avec "order by" ...
Voici ce que j'essaie de faire:
em= l'entity manager
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 List<Page> pages=em.createQuery("SELECT distinct o FROM Page o, PageElement pe " + "left outer join fetch o.elements " + "order by o.name, pe.position").getResultList();
Il faut considérer ce qui suit:
- une Page est constitué de PageElement
- un PageElement à des filles (Text par exemple mais on s'en fou)
Donc, j'aimerais récupérer une liste de de Page (trié sur le champ nom). Je voudrais aussi que le champs "elements" (qui correspond à une collection de PageElement) soit initialisé (pour pas avoir l'erreur de lazy).
Jusque la, tout va bien ... Mais j'en veux plus ...
En effet, quand j'affiche les PageElement d'une Page, ceux-ci devrais être trié sur le champ "position" (qui représente la position sur la page, ce qui est très important). En fait, je préfère demander à hibernate/mysql de trier plutot que de le faire en Java ... Pour l'instant, c'est trié avec l'id de PageElement.
Le fait d'ajouter le "order by ep.position" ne fait strictement rien! Donc, j'ai mes pages qui sont triée mais, pour une page, aucun des PageElement n'est trié
Je viens de lire une partie de la doc, je vois toujours pas comment faire. En fait, je pense que c'est à cause du "left outer join" qui liste les PageElement sans rien trié (donc ca reste sur l'id).
Est-ce que ma déduction est correcte ?
Dois-je utiliser une jointure manuelle (where a.id=b.id .. ?) ???
Et sinon, en java, comment faire pour trier une List d'objet ? N'existe t'il pas un composant qui pourrait le faire à ma place ?
Merci d'avance
EDIT: une Page est liée via à des PageElement via un @OneToMany (et @ManyToOne dans pageElement)
Partager