为什么更新后我的数据应该使用Hibernate刷新?

时间:2017-03-25 15:17:05

标签: hibernate

我正在检查同事寄给我的项目的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()?这一步是为了什么?

2 个答案:

答案 0 :(得分:0)

你应该知道Hibernate的缓存机制。当您查询实体时,它从数据库中获取数据,但如果第二次获取相同数据,则不会从数据库中获取,而是从缓存中获取数据。

如果使用flush(),则表示刷新缓存。所以下次获取数据的时间是来自数据库。

答案 1 :(得分:0)

如果您使用flush,它会立即刷新所有待处理的保存,更新和删除数据库。

仅调用此选项以进行选择性急切刷新,例如,当JDBC代码需要在同一事务中查看某些更改时。否则,最好在交易完成时依赖自动刷新。 而其他方法如持久和保存将在当前事务完成时保存数据。

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