Hibernate无法提取ResultSetexception

我在Tomcat服务器上部署了一个GWT应用程序。 一切都工作正常,但有时我得到以下例外:

org.hibernate.exception.JDBCConnectionException: could not extract ResultSet at com.google.gwt.user.server.rpc.RPC.encodeResponseForFailure(RPC.java:389) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:579) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:265) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:305) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:644) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:301) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:74) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1017) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:652) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1575) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1533) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:744) Caused by: org.hibernate.exception.JDBCConnectionException: could not extract ResultSet at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:132) at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:61) at org.hibernate.loader.Loader.getResultSet(Loader.java:2040) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1837) at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1816) at org.hibernate.loader.Loader.doQuery(Loader.java:900) at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:342) at org.hibernate.loader.Loader.doList(Loader.java:2526) at org.hibernate.loader.Loader.doList(Loader.java:2512) 

如您所见,我使用Hibernate通过以下配置管理我的数据库:

  com.mysql.jdbc.Driver jdbc:mysql://server:3306/db username password  1 15 300 50 3000  com.ohapp.webtattoon.server.service.Mysql5BitBooleanDialect  thread  org.hibernate.cache.NoCacheProvider  false  validate 

我不知道为什么会这样。 我真的很感激一些帮助。

谢谢

看起来连接池的配置不完整。 连接超时设置为300秒。

 300 

因此,连接可能变得无效。 在指定有关如何处理这些连接的规则之前,不会从连接池中丢弃这些无效连接。

通过添加以下行,在每个连接检出处执行连接测试以validation连接是否有效:

   

有关连接测试的更多信息: c3p0连接测试

编辑 :还有另一个非常重要的属性,在您的配置中不存在:

 org.hibernate.connection.C3P0ConnectionProvider 

没有这个属性c3p0根本就没用过。 Sry,我没有看到。

js指出了我正确的方向,但没有解决我的问题。

所以基于js给出的答案,我将我的hibernate配置更改为:

  com.mysql.jdbc.Driver jdbc:mysql://server:3306/db?autoReconnect=true user password  600 20  false 30 conTestTable  com.ohapp.webtattoon.server.service.Mysql5BitBooleanDialect  thread  org.hibernate.cache.NoCacheProvider  false  validate 

关键的区别是属性“hibernate.c3p0.idle_test_period”和“hibernate.c3p0.automaticTestTable”。 一种设置,可确保池中的连接仍然有效,从而防止错误使用死连接。