2013-05-07 33 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