我正在调查代码中的连接泄漏。我们使用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()是否确保将数据库连接返回到连接池?
答案 0 :(得分:3)
在所有catch块中使用transaction.rollback()。 交易将在没有提交的情况下关闭