这是一个小代码片段:
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 ....)。
答案 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();
}