0

Hibernateで次の(簡略化された)シナリオを検討します。

Session session=sessionFactory.openSession();
Transaction tx=session.beginTransaction();
try {
    //Do something with session
    if (...) {
        return something;
    }
    tx.commit();
}
finally {
    session.close();
}

明示的にロールバックせずに戻るのは安全な方法ですか?つまり、コードフラグメントで明示的なロールバックが呼び出されないsession.close()ステートメントは、最終的なロールバックになりますか?

4

1 に答える 1

1

実際のコードがどれほど複雑であるかわからない場合でも、catch/finallyでロールバックしないことはベストプラクティスではありません。これが私の現在のコードがどのように見えるかです:

try{ .....

transaction = session.beginTransaction();  .....
// Finally commit the changes...
        transaction.commit();
}catch (Exception ex) {
        LOG.error(blah);
        transaction.rollback();
        throw new STDException("An error occured ",
                ex);
    } finally {
        session.close();
    }
于 2013-03-13T19:20:29.490 に答える