您的位置:首页 > 其它

session.flush()与session.clear()的区别及使用环境

2015-07-17 15:31 351 查看
首先session是有一级缓存的,目的是为了减少查询数据库的时间,提高效率,一级缓存的生命周期和session是一样的,
session.flush()和session.clear()就针对session的一级缓存的处理。

简单的说,

1 session.flush()的作用就是将session的缓存中的数据与数据库同步。

2 session.clear()的作用就是清除session中的缓存数据(不管缓存与数据库的同步)。

详细的说:网上很多这样的文章,我就不说了,可以看看这篇文章,写的很详细。http://blog.csdn.net/lssssss/article/details/6839633

我说一下一些需要注意的信息:

1 session.clear()的作用是只清除session中的缓存数据,但不管缓存与数据库的同步。

比如,你执行了

Po po = new Po();

session.save(po),

之后马上执行session.clear(),在事务结束的时候,这条数据是不会被持久化到数据库中的,因为一般缓存是在事务提交的时候进行清理的,当在清理缓存前就把缓存给清除了,自然就不会同步到数据库了。不过这个也有例外的情况,就是当对象使用native生成器来生成主键id时,当执行session.save()方法时,就会立马往数据库插入一条数据,这时候执行session.clear()也不会影响了。

2 当更新或者保存大批量数据的时候,可以每固定数量的时候,进行清理缓存,同时清除缓存:

for (int i = 0; i < 1000;i ++){

if (i /20 == 0) {

session.flush();

session.clear();

}

}
因为把大量的对象放到session缓存中会浪费大量的内容空间。

3 执行完session.flush()时,并不意味着数据就肯定持久化到数据库中的,因为事务控制着数据库,如果事务提交失败了,缓存中的数据还是照样会被回滚的。

转载自http://blog.csdn.net/leidengyan/article/details/7514484
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: