2014-09-03 146 views
0

我工作在Java Hibernate和MySQL。我想使用事務settimeout來實現應用程序的支付功能。我只是測試代碼如下settimeout工作。休眠settimeout不工作mysql

Transaction tx = (Transaction) threadTransaction.get(); 
try { 
    if (tx == null) { 
     Session session = (Session) threadSession.get(); 
     session.getTransaction().setTimeout(5); 
     tx=session.beginTransaction(); 

     try { 
      Thread.sleep(6000); 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 

     if(session.getTransaction().isActive()) { 
      System.out.println("session active"); 
     } 
     else { 
      System.out.println("session inactive"); 
     } 

     threadTransaction.set(tx); 
    } 
} 
catch (HibernateException e) { 
    throw new HibernateException("", e); 
} 

但它打印會話活動,意味着超時不起作用。是什麼原因?請幫忙 !

回答

0

只要不需要做任何事情(效率等),Hibernate就很擅長無所事事。我認爲這就是你的測試所顯示的,並不是因爲超時並不適用於intended to do

「...確保數據庫級別的死鎖和具有巨大結果集的查詢受到定義的超時的限制。」 另請注意,「setTimeout()不能在CMT bean中調用......」

用一些代碼來測試事務超時,這些代碼可以完成事務超時的目的,我想你會發現它正常工作。

+0

hai,van謝謝你的回覆。實際上我想要超時長時間的對話,就像用戶選擇一些席位並提交。應用程序鎖定這些座位並執行反式。一個新的跨界開始說5分錢讓他付錢。如果他沒有付錢,就會失敗。這是場景。我測試它和其他工作 – 2014-09-04 02:38:06