我正在使用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;
}
這意味着,如果我調用session.save後運行session.createCriteria,那麼它會自動提交? –
我不這麼認爲.. createcriteria不執行查詢,也應該明確地完成提交,除非你有自動提交設置 – OTM