hibernate3 與db2 8.2(9) 查詢出錯解決方法

  1. Hibernate3.0 與db2 8.2 執行查詢方法 Query queryObject = getSession().createQuery(queryString);時出現如下異常信息。
  2. 後來研究發現導致出現這種異常 - executeQuery method cannot be used for update.的原因是sql註釋不同導致。可以說是hibernate的一個bug。
  3. DB2 的sql 註釋不識別/* */.標識符,而是用--來標識註釋。
  4. 而hibernate 的默認hql 查詢的註釋如: Hibernate make comment (hql) like this /* hql_query */ sql_query
  5. 所以要在hibernate.cfg.xml中把 : <property name="use_sql_comments">true</property>  true改爲false
  6. 查詢運行正常

Hibernate: /* from WxGzjg as model where model.gzjg= ? */ select wxgzjg0_.ID as ID4_, wxgzjg0_.WXGZBH as WXGZBH4_, wxgzjg0_.SFZHXYR as SFZHXYR4_, wxgzjg0_.SFXYJY as SFXYJY4_, wxgzjg0_.XYRQX as XYRQX4_, wxgzjg0_.GZJG as GZJG4_, wxgzjg0_.XBJSRQ as XBJSRQ4_ from DB2ADMIN.WX_GZJG wxgzjg0_ where wxgzjg0_.GZJG=?
2008-08-03 00:21:41,906 DEBUG [http-8088-Processor25] org.hibernate.type.NullableType (NullableType.java:133) - binding '2' to parameter: 1
2008-08-03 00:21:41,921 ERROR [http-8088-Processor25] org.hibernate.util.JDBCExceptionReporter (JDBCExceptionReporter.java:78) - executeQuery method cannot be used for update.
2008-08-03 00:21:41,937 ERROR [http-8088-Processor25] com.cgtech.component.workresult.WxGzjgDAO (WxGzjgDAO.java:110) - find by property name failed
org.hibernate.exception.GenericJDBCException: could not execute query
 at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
 at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 at org.hibernate.loader.Loader.doList(Loader.java:2216)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
 at org.hibernate.loader.Loader.list(Loader.java:2099)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
 at com.cgtech.component.workresult.WxGzjgDAO.findByProperty(WxGzjgDAO.java:108)
 at com.cgtech.struts.actions.workresult.SearchWxgzjgAction.execute(SearchWxgzjgAction.java:67)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at com.cgtech.common.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:53)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
 at java.lang.Thread.run(Thread.java:595)
Caused by: com.ibm.db2.jcc.b.SqlException: executeQuery method cannot be used for update.
 at com.ibm.db2.jcc.b.sf.a(sf.java:2546)
 at com.ibm.db2.jcc.b.tf.d(tf.java:1990)
 at com.ibm.db2.jcc.b.tf.X(tf.java:508)
 at com.ibm.db2.jcc.b.tf.executeQuery(tf.java:491)
 at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
 at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
 at org.hibernate.loader.Loader.doQuery(Loader.java:674)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
 at org.hibernate.loader.Loader.doList(Loader.java:2213)
 ... 32 more
2008-08-03 00:21:41,953 WARN  [http-8088-Processor25] org.apache.struts.action.RequestProcessor (RequestProcessor.java:528) - Unhandled Exception thrown: class org.hibernate.exception.GenericJDBCException
2008-08-03 00:21:41,953 ERROR [http-8088-Processor25] org.apache.catalina.core.StandardWrapperValve (StandardWrapperValve.java:253) - Servlet.service() for servlet action threw exception
com.ibm.db2.jcc.b.SqlException: executeQuery method cannot be used for update.
 at com.ibm.db2.jcc.b.sf.a(sf.java:2546)
 at com.ibm.db2.jcc.b.tf.d(tf.java:1990)
 at com.ibm.db2.jcc.b.tf.X(tf.java:508)
 at com.ibm.db2.jcc.b.tf.executeQuery(tf.java:491)
 at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:186)
 at org.hibernate.loader.Loader.getResultSet(Loader.java:1787)
 at org.hibernate.loader.Loader.doQuery(Loader.java:674)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
 at org.hibernate.loader.Loader.doList(Loader.java:2213)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
 at org.hibernate.loader.Loader.list(Loader.java:2099)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
 at com.cgtech.component.workresult.WxGzjgDAO.findByProperty(WxGzjgDAO.java:108)
 at com.cgtech.struts.actions.workresult.SearchWxgzjgAction.execute(SearchWxgzjgAction.java:67)
 at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
 at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
 at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
 at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at com.cgtech.common.filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:53)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:215)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
 at java.lang.Thread.run(Thread.java:595)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章