正确关闭Hibernate事务

时间:2012-11-27 17:52:17

标签: database hibernate transactions c3p0

我正在调查代码中的连接泄漏。我们使用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()是否确保将数据库连接返回到连接池?

1 个答案:

答案 0 :(得分:3)

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