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: outer join sur objets non liés dans la config Hibernate


Sujet :

Hibernate Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 29
    Points
    29
    Par défaut HQL: outer join sur objets non liés dans la config Hibernate
    Bonjour,

    J'ai vu qu'il est possible en HQL de faire une requête qui renvoie plusieurs objets dans un tableau (=> une liste dont chaque élément est un tableau contenant les objets spécifiés dans le SELECT).

    Voici la requête que j'exécute :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    getSession().createQuery(
       "SELECT tr, h1, h2 
        FROM Transaction as tr
        LEFT OUTER JOIN Forex as h1
           WITH h1.currency = tr.tradeCurrency 
             AND h1.date = tr.valueDate 
             AND h1.relatedToType = 1 
             AND h1.relatedTo = 1
        LEFT OUTER JOIN Forex as h2
           WITH h2.currency = 154 
             AND h2.date = tr.valueDate 
             AND h2.relatedToType = 1 
             AND h2.relatedTo = 1
        ORDER BY tr.valueDate").list();

    Malheureusement j'obtiens l'erreur suivante :
    No data type for node: org.hibernate.hql.ast.tree.IdentNode +-[IDENT] IdentNode: 'h1' {originalText=h1}

    Est-ce que quelqu'un aurait une idée ?
    Merci d'avance.

  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
    Ce n'est pas du HQL ta requête, est-ce volontaire ?

    Si tu veux du HQL, les jointures s'écrivent sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select a
    from objet a left join a.maCollection col
    where col.monAttribut = ...
    Si tu veux du SQL, utilise plutôt une SQLQuery.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 29
    Points
    29
    Par défaut
    Tout d'abord, merci pour ta réponse.

    En fait, la jointure entre les deux objets s'opère non pas entre deux objets en relation mais avec différents attributs qui sont en commun dans ces deux objets.

    Est-ce possible de le faire en HQL, ou dois-je le faire en SQL ? La deuxième solution a l'énorme désavantage de devoir "setter" les données retournées par la requête manuellement dans l'objet.

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

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Points : 9 529
    Points
    9 529
    Billets dans le blog
    1
    Par défaut
    Non, tu n'as pas besoin de faire le chargement des attributs à la main, Hibernate te permet de lier une classe d'entité directement sur une requête SQL native.
    Il faut faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    session.createSQLQuery("select * from maTable where ...").addEntity(laClasse.class);
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 21
    Points : 29
    Points
    29
    Par défaut
    je pense que je vais partir comme ça...

    Merci beaucoup de bonne après-midi

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

Discussions similaires

  1. Left outer join sur Select multitable
    Par ChrOnOs83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 21/01/2009, 17h16
  2. Double OUTER JOIN sur la meme table?
    Par nabab dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/01/2008, 18h48
  3. objets non utilisables dans le code
    Par thierry007 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/10/2007, 15h34
  4. [Débutant] Objets non affichés dans ma fenêtre
    Par G_angel dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 30/01/2007, 13h03
  5. Probleme d'outer join sur absence d'enregistrement
    Par rieppe dans le forum Requêtes
    Réponses: 1
    Dernier message: 17/10/2006, 10h53

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