日期:2014-05-19  浏览次数:20713 次

一个SESSION的事务处理100条记录,然后关闭在开,每次在开一个新的事务处理是否都会刷新HIBERNATE缓存?
一个SESSION的事务处理100条记录,然后关闭在开,每次在开一个新的事务处理是否都会刷新(清除)HIBERNATE内部缓存和二级缓存?

------解决方案--------------------
事务控制

针对hibernate由三种dao操作 find save flush

find即查询不需要开事务,所以可以考虑针对查询不使用事务控制

针对saveOrUpdate使用事务

现在事务提交是在filter结束的时候去做

但有一些action中是不需要事务的,频繁开关事务可能会带来一定的系统开销

当前测试使用和不使用事务进行查询测试结果(根据ID查询记录100次时间比较)

不开事务 421ms

打开事务 516ms

事务的开关最好限定在方法内部,可以考虑在service方法中开关事务,可以避免这个问题

session关闭和事务提交的时候,hibernate会主动调用flush方法进行数据库同步

所以在当前项目中不需要关心flush方法