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");
        }

Whit 这个代码片段我想看看我的数据库是否正在运行,我想知道为什么 Eclipse 会跳过 catch 段。当我的数据库在没有这种 try-catch 方法的情况下关闭时,Eclipse 会给我一个错误(TransactionException ....)。

4

1 回答 1

0

您不需要事务来获取用户名,此外,当 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 回答