2017-03-25 27 views
0

我正在檢查同事發給我的一個項目的dao。而且我發現更新方法:爲什麼更新後我的數據應該使用Hibernate刷新?

@Override 
public void update(Object entity) { 

    try { 
     getHibernateTemplate().update(entity); 
     getHibernateTemplate().flush(); 
     if (logger.isInfoEnabled()) { 
      logger.info("update entity success,"+entity.getClass().getName()); 
     } 
    } catch (RuntimeException e){ 
     logger.error("update entity fail," + entity.getClass().getName(), e); 
     throw e; 
    } 
} 

要知道,更新實體後,爲什麼要調用getHibernateTemplate().flush()?這一步是爲了什麼?

回答

0

你應該知道Hibernate的緩存機制。當你查詢你的實體時,它從數據庫中獲取數據,但如果第二次獲取相同的數據,它不會從數據庫中,而是從緩存中獲取。

如果使用flush(),表示刷新緩存。所以下一次獲取數據來自數據庫。

0

如果您使用刷新功能,它立即刷新所有掛起的保存,更新和刪除數據庫。

僅調用此選項以進行選擇性急切刷新,例如,當JDBC代碼需要在同一事務中看到某些更改時。否則,最好在交易完成時依靠自動沖洗。 而其他方法如堅持和保存將在當前事務完成時保存數據。

參考http://docs.spring.io/spring-framework/docs/2.5.x/api/org/springframework/orm/hibernate3/HibernateOperations.html#flush()

相關問題