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 :

[hibernate] Ma sous-requête ne passe pas


Sujet :

Hibernate Java

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut [hibernate] Ma sous-requête ne passe pas
    Bonjour,

    j'ai une requête qui ne marche pas sous hibernate :
    L'erreur est la suivante :
    Code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    exception 
     
    javax.servlet.ServletException: unexpected AST node: query [SELECT (count(t_s.id) / (SELECT count(t_s2.id) FROM tables.T_Dem_S t_s2 WHERE t_s2.criticite='Majeure Urgente' AND t_s2.date_clo >= '2006-06-01' AND t_s2.date_clo <= '2006-07-06' AND t_s2.application = t_s.application) * 100) FROM tables.T_Dem_S t_s,tables.T_Intervenant t_i WHERE t_s.criticite='Majeure Urgente' AND (EXTRACT(HOUR from timediff(t_s.date_res, t_s.date_aff)) - (DATEDIFF(t_s.date_res, t_s.date_aff)*14)) <= '8' AND t_s.date_clo >= '2006-06-01' AND t_s.date_clo <= '2006-07-06' AND t_s.id_intervenant = t_i.idIntervenant AND t_i.id_groupe = t_i.id_groupe GROUP BY t_s.application]
    	org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:523)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:421)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	sun.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:585)
    	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	java.security.AccessController.doPrivileged(Native Method)
    	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
     
     
    root cause 
     
    org.hibernate.hql.ast.QuerySyntaxException: unexpected AST node: query [SELECT (count(t_s.id) / (SELECT count(t_s2.id) FROM tables.T_Dem_S t_s2 WHERE t_s2.criticite='Majeure Urgente' AND t_s2.date_clo >= '2006-06-01' AND t_s2.date_clo <= '2006-07-06' AND t_s2.application = t_s.application) * 100) FROM tables.T_Dem_S t_s,tables.T_Intervenant t_i WHERE t_s.criticite='Majeure Urgente' AND (EXTRACT(HOUR from timediff(t_s.date_res, t_s.date_aff)) - (DATEDIFF(t_s.date_res, t_s.date_aff)*14)) <= '8' AND t_s.date_clo >= '2006-06-01' AND t_s.date_clo <= '2006-07-06' AND t_s.id_intervenant = t_i.idIntervenant AND t_i.id_groupe = t_i.id_groupe GROUP BY t_s.application]
    	org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
    	org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)
    	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
    	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
    	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
    	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
    	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
    	utils.GenerateReportsHG.getIndicateur71E2(Unknown Source)
    	utils.GenerateReportsHG.generateRapportsHTML(Unknown Source)
    	utils.GenerateReportsHG.execute(Unknown Source)
    	org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
    	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
    	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
    	org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
    	sun.reflect.GeneratedMethodAccessor158.invoke(Unknown Source)
    	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    	java.lang.reflect.Method.invoke(Method.java:585)
    	org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:243)
    	java.security.AccessController.doPrivileged(Native Method)
    	javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
    	org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275)
    	org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:161)
    Ma question est : à quoi l'erreur peut être due, sachant que son équivalente (en SQL) marche très bien sous une console SQL.
    (Peut-on imbriquer des requêtes dans Hibernate ? )

    PS : J'ai fait le test en enlevant la sous-requête, je n'ai plus d'erreurs...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    On peut bien faire des sous-requêtes : http://www.hibernate.org/hib_docs/v3...hql-subqueries

    Mais, tu fais tes requêtes en SQL, HQL, ou Criteria ?

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    En fait, elles viennent d'une requête SQL, j'ai uniquement modifié les champs et les noms des tables (T_Dem_S, et T_Intervenant)...

    La voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT t_s.application,t_s.criticite,
    (count(t_s.id) / (SELECT count(t_s2.id) FROM T_Dem_S t_s2 WHERE t_s2.criticite='Majeure Urgente' AND t_s2.date_clo >= 'dateDebUS' AND t_s2.date_clo <= 'dateFinUS' AND t_s2.application = t_s.application) * 100)
     FROM T_Dem_S t_s,T_Intervenant t_i 
    WHERE t_s.criticite='Majeure Urgente' 
    AND (EXTRACT(HOUR from timediff(t_s.date_res, t_s.date_aff)) - (DATEDIFF(t_s.date_res, t_s.date_aff)*14)) <= '8' 
    AND t_s.date_clo >= 'dateDebUS'
     AND t_s.date_clo <= 'dateFinUS' 
    AND t_s.id_intervenant = t_i.idIntervenant 
    AND t_i.id_groupe = monGroupe 
    GROUP BY t_s.application
    Avant d'exécuter ma requête, je remplace dateFinUS et datedebUS par les bonnes valeurs.

    J'ai bien vérifié : les sous-requêtes passent sous Hibernate (et ma bdd les accepte).
    Qu'est-ce qui ne colle pas ?!?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Essais de configurer ton fichier Log4J en debug sur les requêtes, ty vera peut-être plus clair ?

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Peut-tu me guider, stp car je suis encore débutant

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut Log4J + Hibernate
    Ton fichier log4J doit ressembler à ça, et tu peux mettre ceci, ou plus en mode debug, t'auras plus d'infos sur les détails effectués par Hibernate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    ### direct log messages to stdout ###
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### direct messages to file hibernate.log ###
    #log4j.appender.file=org.apache.log4j.FileAppender
    #log4j.appender.file.File=hibernate.log
    #log4j.appender.file.layout=org.apache.log4j.PatternLayout
    #log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    ### set log levels - for more verbose logging change 'info' to 'debug' ###
    
    log4j.rootLogger=warn, stdout
    
    #log4j.logger.org.hibernate=info
    log4j.logger.org.hibernate=debug
    
    ### log HQL query parser activity
    #log4j.logger.org.hibernate.hql.ast.AST=debug
    
    ### log just the SQL
    log4j.logger.org.hibernate.SQL=debug
    
    ### log JDBC bind parameters ###
    log4j.logger.org.hibernate.type=info
    #log4j.logger.org.hibernate.type=debug
    
    ### log schema export/update ###
    log4j.logger.org.hibernate.tool.hbm2ddl=debug
    
    ### log HQL parse trees
    #log4j.logger.org.hibernate.hql=debug
    
    ### log cache activity ###
    #log4j.logger.org.hibernate.cache=debug
    
    ### log transaction activity
    #log4j.logger.org.hibernate.transaction=debug
    
    ### log JDBC resource acquisition
    #log4j.logger.org.hibernate.jdbc=debug
    
    ### enable the following line if you want to track down connection ###
    ### leakages when using DriverManagerConnectionProvider ###
    #log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
    les "#" marquent des lignes en commentaires, ça permait de ne pas avoir à réécrire le fichier de log, t'as juste à ajouter ou enlever le #.

  7. #7
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    Merci bcp pour l'info, mais je viens de me rendre compte que je n'ai jamais utilisé ce fichier.
    Je ne sais pas où le mettre (WEB-INF, dans un dossier config du serveur ???)

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Au même endroit que ton fichier de configuration xml, c'est-à-dire dans WEB-INF/src.

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    J'ai mis le contenu tel quel dans le fichier log4j.xml (dans Web-INF, avec les autres fichiers xml) mais je n'ai pas plus d'infos
    Info : quand je déploie mon war dans mon serveur j'ai le message suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    log4j:WARN No appenders could be found for logger (org.apache.catalina.session.M
    anagerBase).
    log4j:WARN Please initialize the log4j system properly.
    J'ai l'impression de ne pas avoir tout correctement paramétré, nan ?

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    log4j.properties !!! pr moi ! T'utilises Hibernate 2 ou 3 ? Regardes bien le nom des packages... Le fichier que jt'ai mit, c'est pour de l'hibernate3. T'as mit ça dans WEB-INF/src ?

  11. #11
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    238
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 238
    Par défaut
    J'ai bien hibernate3 et mon fichier est dans WEB-INF (pas de dossier src) car les autres fichiers (struts-config.xml et web.xml) sont à la racine.
    J'ai toujours le même warning et pas d'infos en plus...

    Merci de bien vouloir me guider et désolé d'être aussi nul

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 163
    Par défaut
    Ca marche tjr pas ?
    Ta requête est donc en notation HQL ou SQL ?

    Quant à Log4J, essai de minimaliser le fichier, enlève les lignes que tu ne connais pas... garde-en que quelques unes, et mets-le partout... Pour voir, s'il aime toujours pas....

Discussions similaires

  1. Ma requête ne passe pas
    Par ZeWiz dans le forum Langage
    Réponses: 3
    Dernier message: 27/11/2013, 14h03
  2. Ordonner avec une sous requête ,possible ou pas?
    Par worm1 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 20/02/2007, 06h23
  3. [hibernate]requete SQL qui ne passe pas
    Par Gromitou dans le forum Hibernate
    Réponses: 8
    Dernier message: 09/06/2006, 12h18
  4. [Oracle 9.i] Requête qui passe pas
    Par ftrifiro dans le forum Langage SQL
    Réponses: 7
    Dernier message: 20/12/2005, 17h32
  5. Requête qui ne passe pas
    Par TheBart dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/08/2005, 10h12

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