(MySQLNonTransientConnectionException)Hibernate3.6 + MySQL5 + c3p0

时间:2011-09-30 08:43:01

标签: mysql hibernate jpa connection-pooling c3p0

我正在使用JPA + hibernate 3.6.6 + MySQL5(mysql-connector-java-5.1.6-bin.jar)和c3p0-0.9.1.jar池实现。我的persistence.xml

<properties>
  <property name="hibernate.connection.username" value="xxx"/>
  <property name="hibernate.connection.driver_class" value="xxx"/>
  <property name="hibernate.connection.password" value="xxx"/>
  <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/xxx"/>
  <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
  <property name="hibernate.show_sql" value="true" />
  <property name="hibernate.c3p0.min_size" value="5" />
  <property name="hibernate.c3p0.max_size" value="100" />
  <property name="hibernate.c3p0.timeout" value="1800" />
  <property name="hibernate.c3p0.max_statements" value="50" />
</properties>

我发出的请求可能是1到30,我会得到以下异常。然后,如果我在异常后再次发出相同的请求,它可以正常工作。我知道MySQL5有8小时的超时时间,但在此之前我得到了异常方式。感谢。

Sep 30, 2011 3:56:50 PM com.mchange.v2.c3p0.stmt.GooGooStatementCache checkinStatement
INFO: Problem with checked-in Statement, discarding.
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: No operations allowed after statement closed.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
        at com.mysql.jdbc.Util.getInstance(Util.java:381)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926)
        at com.mysql.jdbc.StatementImpl.checkClosed(StatementImpl.java:380)
        at com.mysql.jdbc.PreparedStatement.clearParameters(PreparedStatement.java:784)
        at com.mchange.v2.c3p0.stmt.GooGooStatementCache.refreshStatement(GooGooStatementCache.java:604)
        at com.mchange.v2.c3p0.stmt.GooGooStatementCache.checkinStatement(GooGooStatementCache.java:236)
        at com.mchange.v2.c3p0.impl.NewPooledConnection.checkinStatement(NewPooledConnection.java:239)
        at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.close(NewProxyPreparedStatement.java:1807)
        at org.hibernate.jdbc.AbstractBatcher.closePreparedStatement(AbstractBatcher.java:563)
        at org.hibernate.jdbc.AbstractBatcher.closeStatement(AbstractBatcher.java:291)
        at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:307)
        at org.hibernate.jdbc.AbstractBatcher.closeQueryStatement(AbstractBatcher.java:234)
        at org.hibernate.loader.Loader.getResultSet(Loader.java:1967)
        at org.hibernate.loader.Loader.doQuery(Loader.java:802)
        at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
        at org.hibernate.loader.Loader.doList(Loader.java:2533)
        at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
        at org.hibernate.loader.Loader.list(Loader.java:2271)
        at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452)
        at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
        at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
        at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
        at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
        at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246)
        ...

1 个答案:

答案 0 :(得分:0)

可能会在长时间不活动后发生。将validationQuery添加到dataSource bean:

<property name="validationQuery">
<value>Select 1</value>
</property>

希望它有所帮助。