IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Hibernate Java Discussion :

[order by] problème sur entité fille


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut [order by] problème sur entité fille
    Bonjour,


    J'ai un souci avec "order by" ...


    Voici ce que j'essaie de faire:
    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();
    em= l'entity manager

    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)

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Quoi, personne ne peut m'aider ?



    En fait, j'ai changé un peu l'application .. Je gère mieux le "lazy" maintenant ...


    Donc maintenant, dans mon site Web, j'ai ceci:
    - une liste des Page
    - l'affichage de la Page (donc, il faut initialiser la collection de PageElement)

    Pour l'affichage de page, j'ai une requette simple:
    "select o from Page o order by o.name"


    Lorsque je veux afficher une Page, je récupère la Page demandée via un findById() grace à l'ID de la page selectionée précédement.

    Dans la facade (méthode findById()), j'utilise l'entity manager pour faire une recherche par ID (em.find(Page.class, id)). J'utilise aussi une méthode pas top pour "fetché" les collections se rapportant à ma Page ... :

    page.getPageElements().size(); //faire un fetch sur la collection PageElement

    Or, le problème est que la requette "select" permettant de remplir la collection est automatiquement généré ... Je ne peux donc pas lui préciser un "tri" ...

    J'aurais aimer remplir la collection de PageElement via une requette à moi, histoire de faire un "order by" sur un des champs ... (le champs "position" qui donne la position d'un element dans la page ...).

    Une idée ?

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Tu peux utiliser l'attribut order-by dans ton mapping.
    Va consulter la documentation.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Nan :o

    C'est aussi con que ca!? :o


    Ben merci, je vais regarder ca

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2007
    Messages : 64
    Points : 54
    Points
    54
    Par défaut
    Super, ca fonctionne


    J'ai juste rajouté l'anotation OrderBy("position") (en dessous du mapping) ou "position" est une propriété du bean mappé


    Encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème sur la recherche fulltext en v4 !
    Par poppa dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/05/2004, 23h06
  2. Problème sur fiche MDIchild
    Par nivet dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/01/2004, 08h07
  3. Problème sur GetPrivateProfileString ???
    Par Bordelique dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2003, 22h15
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo