Hibernateでは、トランザクション管理は非常に標準的ですが、Hibernateによってスローされた例外は

FATAL

であることを覚えておいてください。トランザクションをロールバックして直ちに現在のセッションを閉じる必要があります。

以下はHibernateトランザクションテンプレートです:

        Session session = null;
        Transaction tx = null;

        try{
            session = HibernateUtil.getSessionFactory().openSession();
            tx = session.beginTransaction();
            tx.setTimeout(5);

           //doSomething(session);

            tx.commit();


        }catch(RuntimeException e){
            try{
                tx.rollback();
            }catch(RuntimeException rbe){
                log.error("Couldn’t roll back transaction", rbe);
            }
            throw e;
        }finally{
            if(session!=null){
                session.close();
            }
        }