TransactionException MySQL关闭时的Hibernate

时间:2013-05-07 13:57:33

标签: mysql sql hibernate try-catch

这是一个小代码片段:

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 ....)。

1 个答案:

答案 0 :(得分: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();
}