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 :

Comment faire une jointure externe en Hibernate ?


Sujet :

Hibernate Java

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Comment faire une jointure externe en Hibernate ?
    Bonjour,

    J'aimerais faire l'equivalent de cette requete sql en hibernate :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    	select Distinct j1.jed_id_envoi,j1.JED_MAIL_DESTINATAIRE,envoi.ED_ID_ENVOI
    	    from journal_envoi_document j1
    	    LEFT JOIN envoi_document envoi ON envoi.ED_ID_ENVOI = j1.jed_id_envoi
    		,journal_envoi_document j2, Document doc, Utilisateur U
    		where j1.JED_ID_DOCUMENT_ENVOI = j2.JED_ID_DOCUMENT_ENVOI
     
    //etc...
    Cette meme requete sql sous hibernate me donne l'erreur suivante :


    org.hibernate.hql.ast.QuerySyntaxError: unexpected token: ON near line 1, column
    Quel est l'equivalent en Hibernate ?

    Merci

  2. #2
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    J'imagine que tu souhaites connaitre l'équivalent en HQL ; ce dernier ne permet pas de faire des JOIN en dehors du lien naturel entre les objets. Donc tu peux faire un LEFT JOIN, mais seulement sur la relation entre tes 2 tables - en l'occurrence, vu les noms des colonnes, ça m'a l'air d'être le cas.

    Sinon, il te reste la possibilité d'écrire la requête en SQL !

    Edit : orthographe.

  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    Merci de ta réponse.

    Oui je voudrais savoir l equivalent en HSQL.
    Voici ma requete HSQL aui coince :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
     vBuffer.append(" from JournalEnvoiDocumentVO j1");
    vBuffer.append(" left outer join EnvoiDocumentVO as envoi on envoi.edIdEnvoi = j1.jedIdEnvoi");
       vBuffer.append(" , JournalEnvoiDocumentVO j2, DocumentVO doc, UtilisateurVO ut, TypeDocumentVO type, ServiceVO serv");
        vBuffer.append(" where j1.jedIdDocumentEnvoi = j2.jedIdDocumentEnvoi");
    // plus de conditions ...
    Cette requete coince au niveau de "left outer join EnvoiDocumentVO as envoi on envoi.edIdEnvoi = j1.jedIdEnvoi"

    avec l'erreur de mon message précédent. SI j'enelve cette requete lq requete sql marche. Quel est donc l'erreur que j'ai commise précédemment ?

    Merci

  4. #4
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Je ne suis pas expert en Hibernate/HQL mais moi j'aurai écrit la requête comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    vBuffer.append(" from JournalEnvoiDocumentVO j1 ");
    vBuffer.append(" , JournalEnvoiDocumentVO j2, DocumentVO doc, UtilisateurVO ut, TypeDocumentVO type, ServiceVO serv ");
    vBuffer.append(" left join EnvoiDocumentVO as envoi ");
     
    vBuffer.append(" where envoi.edIdEnvoi = j1.jedIdEnvoi ");
    vBuffer.append(" and j1.jedIdDocumentEnvoi = j2.jedIdDocumentEnvoi ");
    J'espère que cela va t'aider. A+

  5. #5
    Membre chevronné
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Points : 1 806
    Points
    1 806
    Par défaut
    Comme je le disais, de deux choses :

    - l'une, tu as dans ton mapping une jointure de JournalEnvoiDocumentVO vers EnvoiDocumentVO qui porte justement sur la condition envoi.edIdEnvoi = j1.jedIdEnvoi : dans ce cas, tu retires tout simplement la condition ON. Hibernate la rajoute, parce que pour lui c'est LA jointure entre les deux.

    - l'autre, tu n'as pas cette relation. Tu es coincé, il faut faire un produit cartésien avec restriction dans le WHERE. Je n'ai d'ailleurs jamais essayé de faire ça avec des jointures externes.

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/11/2011, 10h48
  2. Comment faire une jointure sélective
    Par mobscene dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/12/2006, 07h44
  3. Réponses: 1
    Dernier message: 09/11/2006, 12h08
  4. Comment faire une jointure ?
    Par Terminator dans le forum Langage SQL
    Réponses: 12
    Dernier message: 16/10/2005, 13h26
  5. [CR9] faire une Jointure externe
    Par coldec dans le forum SAP Crystal Reports
    Réponses: 5
    Dernier message: 28/06/2005, 12h10

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