10

いくつかのJDBC操作を実行するためにHibernateでC3P0接続プールを使用しています。ただし、しばらく使用すると、「接続が閉じられました」(SQLエラー:17008、SQLState:null)エラーが発生します。

org.hibernate.jdbc.Workインターフェースを使用して操作を実行しています:

public class ClassThatDoesWork implements Work {

    @Override
    public void execute(final Connection connection)
            throws SQLException {

        doSomeWork();
        //should connection be closed here?
    }
}

私の質問はconnection、メソッドに引数として渡されたオブジェクトは、execute()そのメソッドの最後で閉じる必要がありますか、それともHibernateが自動的に処理しますか?

編集これらは、使用されるHibernateおよびc3p0パラメーターです。

hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.pool_size=10
hibernate.dialect=org.hibernate.dialect.Oracle9iDialect
hibernate.connection.provider_class=org.hibernate.connection.C3P0ConnectionProvider
hibernate.show_sql=false
acquireIncrement=3
acquireRetryDelay=500
acquireRetryAttempts=5
breakAfterAcquireFailure=false
checkoutTimeout=0
connectionTesterClassName=com.mchange.v2.impl.DefaultConnectionTester
debugUnreturnedConnectionStackTraces=false
dataSourceName=irrelevantDB
identityToken=irrelevantDB
idleConnectionTestPeriod=0
initialPoolSize=3
maxConnectionAge=0
maxIdleTime=7200
maxIdleTimeExcessConnections=0
maxPoolSize=20
maxStatements=50
maxStatementsPerConnection=0
minPoolSize=5
numHelperThreads=3
propertyCycle=0
testConnectionOnCheckin=false
testConnectionOnCheckout=true
unreturnedConnectionTimeout=0
hibernate.c3p0.min_size=5
hibernate.c3p0.max_size=20
hibernate.c3p0.timeout=10
hibernate.c3p0.max_statements=50
4

1 に答える 1

11

データベース接続はHibernateによってメソッド引数として渡されるため、メソッド内で誘惑されてはなりません(たとえば、閉じられます)。これはHibernateの責任です。

于 2012-05-03T14:25:44.503 に答える