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 :

Double left jointures


Sujet :

Hibernate Java

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 476
    Points : 933
    Points
    933
    Billets dans le blog
    5
    Par défaut Double left jointures
    Bonjour,
    Je profite de mon RTT pour poser sereinement un problème sur lequel je butte.
    Je coince pour ma requête HQL.
    L'extrait de l'UML de mes POJO est le suivant:
    http://www.developpez.net/forums/att...1&d=1363675818

    La BDD a pour modèle suivant (pour ce qui est intéressant):
    http://www.developpez.net/forums/att...0&d=1363675842

    Mon objectif est de récupérer les objets Modele, Version, Markup et Article.
    Pour un couple article/version, le markup peut être null. Je veux que dans le tableux récupéré, je puisse avoir un objet java null.

    Si je me place en SQL (ma base de donnée est MySQL), la requête pertinente est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    select
     
    m.nom,
    v.nom,
    markup.taux_markup,
    article.nom
     
    from modele m
     
    left join version v on v.fk_modele=m.id
    left join article_modele am on am.fk_modele=m.id
    inner join article a on a.id=am.fk_article
    left join markup mu on mu.fk_article=a.id and mu.fk_version=v.id
    La requête SQL donne la bonne réponse.
    Le problème est de traduire en HQL.

    Le début serait du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    select m,v,mu,a
     
    from Modele m
     
    left join m.versions as v
    left join m.articlesModele as am
    inner join am.article as a
    left join v.markups as mu
    Le problème est que la jointure ne se fait que d'un côté.
    Avec cette requête, on ne récupère rien quand le markup est null.
    On peut corriger la dernière ligne par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    left join v.markup as mu with mu.article.id=10
    On a un résultat (qui vaut ce qu'il vaut), mais au moins, les markup null s'affichent.

    Par contre, si je corrige par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    left join v.markups as mu with mu.article.id=a.id
    Je lève une exception.

    La solution actuelle est de rechercher les couple (Version/Article) puir ensuite les Markup liés, mais franchement, c'est crade.

    Je préfèrerait une solution dans l'esprit du SQL.
    Images attachées Images attachées   

Discussions similaires

  1. Jointure LEFT JOIN avec Double COUNT
    Par Mike91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 03/03/2015, 12h37
  2. [AC-2010] Double left join de deux table différentes vers une même table
    Par Nikimizi dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 19/08/2014, 15h13
  3. Réponses: 6
    Dernier message: 20/01/2009, 15h17
  4. Lignes en double dans le résultat d'une jointure
    Par ledevelopeur dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 18h10
  5. [jointure]requete possible de double jointure entre 2 tables
    Par akira_le_gaucher dans le forum Langage SQL
    Réponses: 4
    Dernier message: 11/05/2004, 15h03

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