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

Persistance des données Java Discussion :

Equivalent de left join en HQL


Sujet :

Persistance des données Java

  1. #1
    Membre régulier Avatar de kodo
    Profil pro
    Chef de projet technique
    Inscrit en
    Mars 2006
    Messages
    300
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations professionnelles :
    Activité : Chef de projet technique

    Informations forums :
    Inscription : Mars 2006
    Messages : 300
    Points : 92
    Points
    92
    Par défaut Equivalent de left join en HQL
    bonjour,
    j'ai 4 classe Parent(id, libelle, montant) ,ChildA(infoA), ChildB(infoB), et ChildC(infoC).
    ChildA, ChildB, ChildC héritent de la classe Parent.
    Comment traduire en HQL la requete suivante : select * from Parent p left outer join ChildC c on c.id=p.id where c.id is null ?

    Merci.

  2. #2
    Membre éclairé

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 462
    Points : 896
    Points
    896
    Billets dans le blog
    5
    Par défaut
    Il y a plusieurs choses à savoir.

    Pour commencer, si on parle d'héritage, c'est un peu particulier.

    Mais l'intérêt d'un ORM est là.

    La première question est comment as-tu fait pour mapper cet héritage.

    Rappel:
    https://viseo.developpez.com/tutorie...gies-heritage/

    Ensuite, le JPQL sera simple.
    On utilisera de fait le polymorthisme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT FROM Parent
    De fait, la jointure est inutile.

    Attention à la stratégie de mapping avec l'héritage, il y a des subtilités selon les cas.

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 311
    Points : 9 524
    Points
    9 524
    Billets dans le blog
    1
    Par défaut
    Pour complété, tout va dépendre de la structure physique des tables voulue.

    Si par exemple ta classe "Parent" fait référence à une table qui contient les propriétés de la classe et que tes tables ChildA, ChildB et ChildC contiennent les colonnes spécifiques alors, le plus souvent, on utilise une stratégie JOINED.
    On passe par une colonne discriminante pour faire le distinguo
    On peut donc faire une requête directement sur la classe "Parent" qui renverra un mixe de ChildA, ChildB et ChildC.

    Si par contre tu veux avoir 3 tables ChildA, ChildB, ChildC qui ont des colonnes communes (représentées par les propriétés de ta classe Parent), c'est une autre stratégie TABLE_PER_CLASS et ta classe Parent est "abstract".
    Enfin, tu peux mettre toutes les propriétés dans une seule table et ventiler dans plusieurs classes via la stratégie SINGLE_TABLE

    Cependant, dans d'autres contextes, on peut être amené à exprimer une jointure sur une propriété d'une entity représentant une autre entity pour précharger en une seule requête les données des 2 tables (ou plus).
    On ferait quelque chose comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a from ClasseA a left join fetch a.classeB b ...
    Petit correctif par rapport à ce qu'a indiqué PhilippeGibault, en JPQL ce serait plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select a from Parent a ...
    En Hibernate natif (HQL), on a un raccourci
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [AC-2007] Equivalent Left Join dans Clause Where
    Par kornetmuse dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/03/2013, 16h31
  2. [HQL] Left Join fetch et exists
    Par LittleBean dans le forum Hibernate
    Réponses: 3
    Dernier message: 23/10/2009, 15h41
  3. Interbase et left join
    Par Zog dans le forum Bases de données
    Réponses: 4
    Dernier message: 23/03/2004, 08h55
  4. Non coincident MySQL (Left Join)
    Par Remiguel dans le forum Requêtes
    Réponses: 6
    Dernier message: 03/11/2003, 21h25
  5. Export d'une vue avec LEFT JOIN
    Par schnourf dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/05/2003, 13h57

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