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 :

[HQL] pb de jointure


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut [HQL] pb de jointure
    bonjour a tous,
    j'ai un problème avec une requête HQL. forcement de l'HQL car c'est pour IReport donc je ne peut pas utiliser autre chose (notamment criteria, ...)

    voici la requete SQL qui fonctionne et que je voudrais traduire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT pr.*, d.* FROM 
    reservation r JOIN produit_reserve pr ON pr.reservation_fk = r.id 
    JOIN produit_possible pp ON pp.id=pr.produit_possible_fk 
    LEFT JOIN description d  ON d.langue_fk = pp.langue_fk AND d.produit_fk = pp.produit_fk 
    ORDER BY R.date_reserve, pr.heure_debut
    j'ai donc commencé a la traduire en HQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select pr, d from 
    monpaquet.Reservation r join r.produitReserves pr
    join pr.produitPossible pp 
    [...]
    order by r.dateReserve, pr.heureDebut
    le problème se situe a comment "traduire" le on du LEFT JOIN avec ses deux paramètres

    pour info :
    dans ma requête SQL les *_fk sont bien sur des clés étrangères des tables s'y rapportant donc langue_fk est la clé étrangère de la table langue
    j'utilise Hibernate 3 avec Spring
    une db postgres

    je ne sais pas si vous pourrez m'aider mais merci d'avance a tous ceux qui essaieront ou réussiront (ça c mieux bien sur )

  2. #2
    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
    Voici une idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select pr, d from 
    monpaquet.Reservation r join r.produitReserves pr
    join pr.produitPossible pp
    left join pp.description d
    where  d.langue_fk = pp.langue_fk 
    [...]
    order by r.dateReserve, pr.heureDebut
    En gros, mettre la deuxième condition du left join dans le where.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    merci de répondre si vite le probleme dans ta réponse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select pr, d from 
    monpaquet.Reservation r join r.produitReserves pr
    join pr.produitPossible pp
    left join pp.description d
    where  d.langue_fk = pp.langue_fk 
    [...]
    order by r.dateReserve, pr.heureDebut
    est le suivant :
    pp.langue_fk et pp.produit_fk peuvent etre null d'ou le LEFT JOIN pour obtenir quand meme le produitreserve(pr)
    description n'est pas dans la table produitpossible (pp) (donc pp.description n'existe pas) d'ou le passage par ces deux colonnes (langue_fk et produit_fk) pour faire ma jointure

  4. #4
    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
    J'avoue que je n'ai jamais eu ce genre de requête à faire de double left join.

    Concernant les join, ils se font sur des collections, donc essayer de transcrire
    une requête sql comme ça, sans voir le mapping, on peut pas dire que ce soit très facile.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    me voici de retour au travail donc voici le schema UML correspondant a cette partie:


    en esperant que ça puisse aider

  6. #6
    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
    Et un truc du genre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select produitRes, description
    from Reservation res inner join res.produitReserve produitRes
    left join produitRes.produitPossible.langue.Description description
    left join produitRes.produitPossible.produit.Description description
    where

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    ta reponse est interressante mais le probleme est qu'il donne en plus des mauvais résultats je cherche pour voir si dans le where on peut mettre quelque chose pour filtrer correctement

  8. #8
    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
    Essaie d'identifier les mauvais résultats et pourquoi sont-ils mauvais ?

    Peut-être que le code suivant marcherait mieux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select produitRes, description
    from Reservation res inner join res.produitReserve produitRes
    left join produitRes.produitPossible.langue.Description description1
    left join produitRes.produitPossible.produit.Description description2
    where description1.id = description2.id

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 56
    Points : 49
    Points
    49
    Par défaut
    ta nouvelle requete me donne toute les bonnes reponses (et uniquement celles la)sauf celles ou il n'y pas de description trouvé

  10. #10
    Membre régulier
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 110
    Points
    110
    Par défaut
    Salut à tous,

    Voici une solution pour palier ce problème.
    Ici le code SQL Natif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dbo.CLI client1_,
     
    dbo.HTL hotel7_      
     
    left outer JOIN dbo.DCH hoteldistr2_ ON hotel7_.HTLNUMBER=hoteldistr2_.HTLNUMBER AND client1_.CLICODE=hoteldistr2_.CLICODE,
    en voici une traduction HQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Client c,
    Hotel htl left outer join htl.hotelDistributions as hd with c = hd.client,
    Voilou.

Discussions similaires

  1. requete HQL + multiple cle + jointures
    Par Vire7777 dans le forum Hibernate
    Réponses: 2
    Dernier message: 09/11/2010, 10h58
  2. [HQL] Select avec jointure
    Par jeoff dans le forum Hibernate
    Réponses: 1
    Dernier message: 07/11/2006, 12h12
  3. erreur dans une jointure HQL
    Par Galak extra dans le forum Hibernate
    Réponses: 8
    Dernier message: 14/08/2006, 00h59
  4. Jointure entre 3 tables en HQL
    Par Tail dans le forum Hibernate
    Réponses: 2
    Dernier message: 04/08/2006, 09h37
  5. [HIBERNATE] Jointure en HQL
    Par faya972 dans le forum Hibernate
    Réponses: 1
    Dernier message: 04/05/2006, 11h08

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