0

ここに小さなコードの断片があります:

try {
            session = HibernateUtil.getSession();
            session.beginTransaction();
            u = (UserDetails) session.get(UserDetails.class, user.getUserName());
            session.getTransaction().commit();
            session.close();
        }
        catch(TransactionException ex) {
            ex.printStackTrace();
            addFieldError("userName","No connection. Try again later");
        }

このコード フラグメントを使用して、データベースが実行されているかどうかを確認したいのですが、なぜ Eclipse が catch セグメントをスキップするのかを知りたいのです。この try-catch メソッドを使用せずにデータベースを閉じると、Eclipse からエラー (TransactionException....) が返されます。

4

1 に答える 1

0

userName を取得するためだけにトランザクションは必要ありません。また、try ブロックが失敗したときにセッションを開いたままにしています。

そしてもちろん、try/catch なしでエラーが発生します。例外を処理する必要があります。この場合、HibernateException をキャッチする必要があります。

本当にトランザクションが必要な場合は、次のように処理します。

Session session = null;
Transaction transaction=null;
try{
    session = HibernateUtil.getSession();       
    transaction = session.beginTransaction();
    u = (UserDetails) session.get(UserDetails.class, user.getUserName());
    transaction.commit();
}catch(HibernateException he){
    ex.printStackTrace();
    addFieldError("userName","No connection. Try again later");
    if(transaction !=null)
        transaction.rollback();
}finally{
    if(session.isOpen())
        session.close();
}
于 2013-05-07T16:09:46.953 に答える