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 :

Requête avec inner join


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Par défaut Requête avec inner join
    Bonjour messieurs,
    Je suis actuellement a la recherche d’une requête hibernate sur mes DTO car j’ai une requête SQL qui s’exécute super bien quand je pace par un client SQL classique cette requête SQL est :
    Ma requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT v.VALUE FROM  t_value v 
    INNER JOIN (SELECT r.id_key, 
    MAX(r.id_goroco) AS id_goroco,
    MAX(r.id_value) AS id_value
    FROM t_rel_kvlg r INNER JOIN t_key k ON k.id_key = r.id_key
    WHERE r.id_goroco <=21 
    AND r.id_locale = 3
    AND (k.end_version = 0 OR k.end_version >=21 ) 
    AND k.start_version <= 21 
    AND k.id_project = 1 
    GROUP BY r.id_key, r.id_locale, k.start_version, k.end_version ) t ON v.id_value = t.id_value
    WHERE v.VALUE = 'to be translated' OR v.VALUE = 'Ã* traduire' OR v.VALUE = 'A traduire'
    Mon problème est quand je passe par hibernate je remplace dans la requête par mes DTO et ca ne marche pas pourtant j’ai regardé sur internet et pas de problème pour les inner join normalement je ne comprends pas vraiment à vrai dire. Si quelqu’un a des explications je suis preneur.
    Ma requête Hibernate :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT VALUE AS VALUE 
    FROM  Value value inner join (SELECT kvlg.idKey, MAX(kvlg.idGoroco), MAX(kvlg.idValue) 
    FROM Kvlg kvlg inner join Key key ON key.idKey = kvlg.idKey 
    WHERE kvlg.idGoroco <= 21 
    AND kvlg.idLocale = 2 
    AND (key.endVersion = 0 OR key.endVersion >= 21 )
    AND key.startVersion <= 21 
    AND key.idProject = 1
    GROUP BY kvlg.idKey, kvlg.idLocale, key.startVersion, key.endVersion ) t ON value.idValue = t.idValue 
    WHERE value.VALUE = 'to be translated' OR value.VALUE = 'Ã* traduire' OR value.VALUE = 'A traduire'
    Sur le net pour les sous-reqête :
    - Note that HQL subqueries can occur only in the select or where clauses. source http://docs.jboss.org/hibernate/core.../queryhql.html

    J'ai l'impression que ma sous requête dans le inner join … il n’aime pas trop hibernate. Soit c’est sa soit je suis vraiment un manche … Si quelqu'un a une solution, je suis prenneur.

  2. #2
    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
    Billets dans le blog
    1
    Par défaut
    Ce n'est pas du HQL ça, c'est du SQL...
    Tu l'exécutes via createQuery ?
    Si oui, utilises plutôt createSQLQuery (sql natif)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Par défaut
    Ma première requête je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List values = session.createSQLQuery("SELECT VALUE FROM  t_value v INNER JOIN (SELECT r.id_key, MAX(r.id_goroco) AS id_goroco, MAX(r.id_value) AS id_value FROM t_rel_kvlg r INNER JOIN t_key k ON k.id_key = r.id_key WHERE r.id_goroco <=21 AND r.id_locale = 3 AND (k.end_version = 0 OR k.end_version >=21 ) AND k.start_version <= 21 AND k.id_project = 1 GROUP BY r.id_key, r.id_locale, k.start_version, k.end_version ) t ON v.id_value = t.id_value WHERE v.VALUE = 'to be translated' OR v.VALUE = 'Ã* traduire' OR v.VALUE = 'A traduire' ").addEntity(Value.class).list();
    L'erreur qui se produit dans les logs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    org.hibernate.exception.SQLGrammarException: could not execute query
    Caused by: java.sql.SQLException: Column 'id_value' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
    	at com.mysql.jdbc.ResultSet.findColumn(ResultSet.java:987)
    	at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:2749)
    	at org.hibernate.type.IntegerType.get(IntegerType.java:28)
    	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
    	at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
    	at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
    	at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
    	at org.hibernate.loader.Loader.doQuery(Loader.java:701)
    	at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
    	at org.hibernate.loader.Loader.doList(Loader.java:2220)
    Et quand je passe par session.createQuery() avec ma 2ème requête message d'erreur aussi.

  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
    Billets dans le blog
    1
    Par défaut
    Si id_value n'existe pas dans la table t_rel_kvlg c'est normal...
    J'ai l'impression que tu mixes les principes HQL et SQL mais comme je ne connais pas la structure physique des tes tables...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2010
    Messages
    121
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 121
    Par défaut
    id_value existe bien dans la table t_rel_kvlg

    Cette requête la avec mon client sql marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SELECT VALUE FROM  t_value v 
    INNER JOIN (SELECT r.id_key, 
    MAX(r.id_goroco) AS id_goroco,
    MAX(r.id_value) AS id_value
    FROM t_rel_kvlg r INNER JOIN t_key k ON k.id_key = r.id_key
    WHERE r.id_goroco <=21 
    AND r.id_locale = 3
    AND (k.end_version = 0 OR k.end_version >=21 ) 
    AND k.start_version <= 21 
    AND k.id_project = 1 
    GROUP BY r.id_key, r.id_locale, k.start_version, k.end_version ) t ON v.id_value = t.id_value
    WHERE v.VALUE = 'to be translated' OR v.VALUE = 'Ã* traduire' OR v.VALUE = 'A traduire'
    Mais pas quand je passe avec hibernate via session.createSQLQuery() c'est pour ca qu'il doit y avoir un problème avec les paramétre que je passe après a savoir .addEntity(Value.class).list();

  6. #6
    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
    Billets dans le blog
    1
    Par défaut
    A quoi ressemble ta classe Value ?
    Peux-tu mettre la trace de l'erreur ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Requête update avec inner join
    Par mattmax dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/05/2013, 14h53
  2. Ma requête avec INNER JOIN
    Par vocal94130 dans le forum Requêtes
    Réponses: 3
    Dernier message: 20/08/2010, 09h23
  3. [MySQL] Requête avec inner join
    Par kate59 dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 19/02/2008, 17h28
  4. [Access] Problème dans une requête SQL avec INNER JOIN ?
    Par bds2006 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/06/2006, 10h57
  5. requête avec inner join ?
    Par Melvine dans le forum Oracle
    Réponses: 5
    Dernier message: 30/03/2006, 09h16

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