为什么更新后我的数据应该使用Hibernate刷新?
我正在检查同事发给我的一个项目的dao。我发现更新方法:为什么更新后我的数据应该使用Hibernate刷新?,hibernate,Hibernate,我正在检查同事发给我的一个项目的dao。我发现更新方法: @Override public void update(Object entity) { try { getHibernateTemplate().update(entity); getHibernateTemplate().flush(); if (logger.isInfoEnabled()) { logger.info("update entity
@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()
?这一步是为了什么?你应该知道Hibernate的缓存机制。当您查询实体时,它从数据库中获取数据,但如果第二次获取相同的数据,它将不会从数据库中获取,而是从缓存中获取
如果使用
flush()
,则表示刷新缓存。因此,下一次从数据库获取数据。如果使用flush,它会立即刷新数据库中所有挂起的保存、更新和删除
仅当JDBC代码需要在同一事务中看到某些更改时,才调用此选项进行选择性的即时刷新。否则,最好依靠事务完成时的自动刷新。
而其他方法(如persist和save)将在当前事务完成时保存数据
参考文献