2017-04-21 65 views
1

我正在使用spring mvc 3.2和hibernate 3.6.3構建web應用程序。我在我的DAO類中使用了HibernateDaoSupport類。現在我想更新一個實體,使用session.update()其中我從hibernateDaoSupport方法獲得會話getSession()。我在這也使用交易。 但是在提交事務之後,更新沒有反映在數據庫中。但是如果我在提交之前使用session.flush(),那麼它會得到反映。因爲我知道transaction.commit在提交之前調用flush,那麼爲什麼它沒有更新記錄。我沒有在我的應用程序上下文中使用任何事務管理器,然後如何使用hibernatedaosupport管理事務。當一個新的會話將在我的應用程序中打開,因爲getSession方法檢查當前事務的會話,如果發現它然後返回那個新的。那麼這意味着每個http請求中都會打開一個新的hibernate會話呢?session.update()或session.save()的數據沒有反映在數據庫中?

吾道守則 -

public Map<String, Object> addImmunizationCard(Box box, 
      Map<String, Object> dataMap) { 
     Session session = (Session) getSession(); 
     Map<String, Object> map = new HashMap<String, Object>(); 
     Transaction tx = null; 
try { 
      tx = session.beginTransaction(); 

MasBed bed = (MasBed)session.get(MasBed.class, new Integer(1101)); 

      System.out.println(bed.getBedNo()); 
      bed.setBedNo("Amit Das"); 
      session.update(bed); 
      tx.commit(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
      tx.rollback(); 
     } 
     return map; 
} 

回答

0

默認刷新模式爲AUTO,這意味着它的查詢執行之前有時刷新。當刷新模式設置爲COMMIT時,在事務提交之前完成刷新。

請參閱https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/FlushMode.html

+0

這意味着,如果我調用session.save後運行session.createCriteria,那麼它會自動提交? –

+0

我不這麼認爲.. createcriteria不執行查詢,也應該明確地完成提交,除非你有自動提交設置 – OTM

相關問題