2013-05-07 61 views
0

这里有一个小的代码片段:TransactionException休眠当MySQL被关闭

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中跳过捕段。当我的数据库没有这个try-catch方法关闭时,Eclipse给我一个错误(TransactionException ....)。

回答

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(); 
} 
+0

它不工作。它只是站着和加载......不给我一个错误或任何东西。我如何才能简单地检查然后(与try/catch)如果我的数据库启动并运行? – 2013-05-07 18:08:35