2017-03-17 15 views
0

は、次のコードは、Hibernateのトランザクションを管理するために使用されている:彼らは、これは接続が正しくメソッドの最後に閉じられていることを確認するために行われている私に言ったHibernateトランザクション:このコードのポイントは何ですか?私のプロジェクトで

public void someMethod() { 
    Session session = HibernateSessionFactory.getSession(); 
    Transaction tx = session.beginTransaction(); 
    try { 
     session.save(something); 
    } catch (Exception e) { 
     tx.rollback(); 
     logger.error("error", e); 
     throw new EJBException(e); 
    } finally { 
     try { 
      tx.commit(); 
     } catch (Exception e) { 
      tx.rollback(); 
      logger.error("error", e); 
     } finally { 
      session.close(); 
     } 
    } 
} 

。しかし、私はfinallyブロック内でコミット/ロールバックを行う点を理解していません。

このアプローチを正当化する本当の理由はありますか、これと同じように簡単なことを行う方が良いでしょうか?

public void simplerMethod() { 
    Session session = HibernateSessionFactory.getSession(); 
    Transaction tx = session.beginTransaction(); 
    try { 
     session.save(something); 
     tx.commit(); 
    } catch (Exception e) { 
     tx.rollback(); 
     logger.error("error", e); 
     throw new EJBException(e); 
    } finally { 
     session.close(); 
    } 
} 

答えて

1

それは二つの理由から、試しに次のようになります。

いくつかの例外またはHibernateExceptionで以外のエラー、あなたはほぼ確実ということをしたくない場合は、セッションをコミットします

ロールバックを呼び出した後にcommitを呼び出します。私はHibernateが(ロールバックを黙って無視することによって)それを行うことを許可するかどうか覚えていませんが、少なくともそれは醜いです。すべてのセッションをコミットまたはロールバックする必要があります。

関連する問題