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();
}

このコードはDB接続をリークする可能性がありますか?失敗した場合にトランザクションを明示的にロールバックする必要がありますか、それとも自動的に行われますか?entityManager.close()は、DB接続が接続プールに返されることを保証しますか?

4

1 に答える 1

3

すべてのcatchブロックでtransaction.rollback()を使用します。その後、トランザクションはコミットなしで閉じられます

于 2012-11-27T19:50:25.887 に答える