我正在检查同事寄给我的项目的dao。我发现更新方法:
@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 :(得分:0)
你应该知道Hibernate的缓存机制。当您查询实体时,它从数据库中获取数据,但如果第二次获取相同数据,则不会从数据库中获取,而是从缓存中获取数据。
如果使用flush()
,则表示刷新缓存。所以下次获取数据的时间是来自数据库。
答案 1 :(得分:0)
如果您使用flush,它会立即刷新所有待处理的保存,更新和删除数据库。
仅调用此选项以进行选择性急切刷新,例如,当JDBC代码需要在同一事务中查看某些更改时。否则,最好在交易完成时依赖自动刷新。 而其他方法如持久和保存将在当前事务完成时保存数据。