2

我正在调查我的代码中的连接泄漏。我们使用 c3p0 来管理连接池,我的一般 Hibernate 使用模式是这样的:

EntityManager entityManager = entityManagerFactory.createEntityManager();

try {

    EntityTransaction transaction = entityManager.getTransaction();
    transaction.begin();

    //..Work involving calls to find() and merge()

    transaction.commit();

} catch (... e) {
   //..log message, throw nicer exceptions

} finally {
   entityManager.close();
}

此代码是否有可能泄漏数据库连接?在失败的情况下我是否必须显式回滚事务,还是自动完成?entityManager.close() 是否确保将数据库连接返回到连接池?

4

1 回答 1

3

在所有 catch 块中使用 transaction.rollback()。事务将在没有提交的情况下关闭

于 2012-11-27T19:50:25.887 回答