以下のコードは正常に動作しますか、それとも作業を行う前にトランザクションを開始する必要がありますか?
Session session = SessionFactory.openSession();
//do some work like session.save/Update
finally{
session.beginTransaction().commit();
}
いいえ。もちろん、トランザクションの一部であるコードは、トランザクションの開始とコミットの間にある必要があります。
これが(ドキュメントの内容です:
セッション/トランザクション処理のイディオムは次のようになります。
// Non-managed environment idiom
Session sess = factory.openSession();
Transaction tx = null;
try {
tx = sess.beginTransaction();
// do some work
...
tx.commit();
}
catch (RuntimeException e) {
if (tx != null) tx.rollback();
throw e; // or display error message
}
finally {
sess.close();
}
トランザクションを管理する必要はありません。すぐに効果を得るためにコミットし、Hibernate によってスローされた例外は致命的です。トランザクションをロールバックして現在のセッションを閉じる必要があります。