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 :

SQLGrammarException -- ORA-01776


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Par défaut SQLGrammarException -- ORA-01776
    Bonjour,

    Dans un projet J2EE, je cherche à contruire une Query hibernate à partir d'une phrase HQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select distinct lower(ag.ville) from Vwagentall as ag where ag.id in (select agt.id from net.sa.afi.home.Vwagentall as agt where agt.afigpetab.id=1 and agt.archive=0)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query query = hibernateSessionFactory.currentSession().createQuery(hql);
    Dans la plupart des cas, cette ligne fonctionne bien, mais parfois, sans évènement particulier apparent, une exception est soulevée:
    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
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    ERROR 14 juin 2007 15:02:49,898 JDBCExceptionReporter : ORA-01776: cannot modify more than one base table through a join view
     
    ERROR 14 juin 2007 15:02:49,898 AbstractFlushingEventListener : Could not synchronize database state with session
    org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
    	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:65)
    	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    	at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:230)
    	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:141)
    	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:296)
    	at org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:41)
    	at org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:951)
    	at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:109)
    	at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:88)
    	at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1540)
    	at net.sa.afi.taglib.dynaTreeView.TreeBuilder.getAttributeValues(TreeBuilder.java:1337)
    	at net.sa.afi.taglib.dynaTreeView.TreeBuilder.getFullAttributeName(TreeBuilder.java:859)
    	at net.sa.afi.taglib.dynaTreeView.TreeBuilder.buildTreeWithData(TreeBuilder.java:128)
    	at net.sa.afi.taglib.DynaTreeView.doTag(DynaTreeView.java:202)
    	at org.apache.jsp.gpTree.gpTreeTree_jsp._jspx_meth_afi_tagDynaTreeView_0(gpTreeTree_jsp.java:1064)
    	at org.apache.jsp.gpTree.gpTreeTree_jsp._jspx_meth_afi_tagVerticalTabs_0(gpTreeTree_jsp.java:348)
    	at org.apache.jsp.gpTree.gpTreeTree_jsp._jspx_meth_netui_form_0(gpTreeTree_jsp.java:283)
    	at org.apache.jsp.gpTree.gpTreeTree_jsp._jspx_meth_netui_body_0(gpTreeTree_jsp.java:226)
    	at org.apache.jsp.gpTree.gpTreeTree_jsp._jspx_meth_netui_html_0(gpTreeTree_jsp.java:154)
    	at org.apache.jsp.gpTree.gpTreeTree_jsp._jspService(gpTreeTree_jsp.java:104)
    	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
    	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
    	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.beehive.netui.pageflow.PageFlowPageFilter.runPage(PageFlowPageFilter.java:294)
    	at org.apache.beehive.netui.pageflow.PageFlowPageFilter.doFilter(PageFlowPageFilter.java:209)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
    	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)
    	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)
    	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
    	at org.apache.beehive.netui.pageflow.internal.DefaultForwardRedirectHandler.forward(DefaultForwardRedirectHandler.java:127)
    	at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.doForward(PageFlowRequestProcessor.java:1797)
    	at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processForwardConfig(PageFlowRequestProcessor.java:1670)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
    	at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:550)
    	at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:838)
    	at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:634)
    	at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:156)
    	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at net.sa.afi.httpfilter.HttpFilter.doFilter(HttpFilter.java:74)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
    	at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
    	at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    	at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Thread.java:595)
    Caused by: java.sql.BatchUpdateException: ORA-01776: cannot modify more than one base table through a join view
    Si quelqu'un a une idée...

  2. #2
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Je crois que l'anomalie ne vient pas de la requete ... mais du dirty-checking, tu as du modifier un objet lié à ta requete (peut etre Vwagentall).

    Pour confirmer essaye de faire un session.flush avant d'executer ta requete.

    Mais je ne suis pas sur...

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Par défaut
    j'y ai cru, mais le session.flush n'y fait rien, j'ai toujours la meme erreur.

    J'ai vérifié le log détaillé et avant l'erreur j'ai la ligne suivante qui apparit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DEBUG 14 juin 2007 15:29:32,639 JDBCExceptionReporter : Could not execute JDBC batch update [update VWAGENTALL set MATRICULE=?, CBANQUE=?, DTENTREE=?, DTSORTIE=?, INDBRUT=?, INDMAJ=?, ARCHIVE=?, NOM=?, PRENOM=?, NOMJF=?, SEXE=?, DNAISSANCE=?, LNAISSANCE=?, EN_CHARGE=?, EN_FOYER=?, EN_SF=?, EN_DATEFINSF=?, NIR=?, NRUE=?, IND_VOIE=?, ADRESSE1=?, ADRESSE2=?, CODEPOSTAL=?, VILLE=?, IDLIEN=?, IDFAM=?, IDNAT=?, IDCIV=?, IDNATNAISS=?, IDFAMILLE=?, IDARTICLE=?, IDGRILLE=?, IDGRADE=?, IDSERVICE=?, IDACTIF=?, IDETABLISSEMENT=?, IDPERS=? where ID=?]
    java.sql.BatchUpdateException: ORA-01776: cannot modify more than one base table through a join view

  4. #4
    BsT
    BsT est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France, Hauts de Seine (Île de France)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 72
    Par défaut
    Pardon le session.flush() c'est pour forcer hibernate à passer l'update que l'on voit.

    Le problème vient donc de plus haut dans ton code...

    Edit : dsl je ne connais pas trop Oracle ... tu mappes une vue ? D'après le message tu ne peux pas faire d'update donc. Il faut peut etre revoir ton mapping ?

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    95
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 95
    Par défaut
    C'est bon j'ai corrigé. T'avais raison, le problème venais de plus haut (je me trainais la dirty session depuis un moment, le flush était exécuté automatiquement juste avant ma requete);
    Ce qui se passait, c'est que je modifiait une liste de vwagentall par introspection , et il y avais un cas ou je faisais un set avec un objet null. Le "setter.invoke" passais, mais va savoir pourquoi, Hibernate voulais mettre a jour la vue, avec des valeurs null de surcroit.. d'ou l'update foireux.

    Merci en tout cas de m'avoir mis sur la voie.

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

Discussions similaires

  1. [ORA-01033]
    Par delphim dans le forum Oracle
    Réponses: 11
    Dernier message: 05/05/2004, 11h14
  2. erreur ora-12801 : error signaled in parallel query server
    Par dngaya dans le forum Administration
    Réponses: 5
    Dernier message: 15/04/2004, 16h25
  3. erreur "ORA-22905" lors de l'execution d'un requet
    Par benji999 dans le forum Administration
    Réponses: 26
    Dernier message: 14/04/2004, 11h47
  4. Réponses: 14
    Dernier message: 02/04/2004, 14h33
  5. Oracle ORA-00020 : maximum de processus
    Par Lisou dans le forum Administration
    Réponses: 5
    Dernier message: 22/03/2004, 16h27

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