hibernate刷新数据时的缓存问题

今天碰见了一个BUG,两个系统同使用一个数据库,两个系统都采用的SSH框架,其中一个系统更新了数据库后,另一个系统得5分钟后才能取得更新的数据,肿么回事呢?

仔细查了查,原来是hibernate缓存的问题,众所周知,hibernate是采取二级缓存的策略,第一是session级别的缓存,二是sessionfactory级别的缓存,并且默认二级缓存是打开的。(使用缓存需设置配置hibernate.cache.use_query_cache=true)读取数据的时候,Hibernate将第一次读取的内容放到了缓存中,若此时有别的应用修改了数据库中的数据,程序再次读取的时候,内容是从缓存中直接获取,先从一级缓存中读,若没有则从二级缓存中读取,则读取的数据为过时的数据。

   采取的应对措施为:

           1.session.clear(),先清除一级缓存

           2.createSQLQuery创建的SQLQuery对象query中设置query.setCacheMode(CacheMode.IGNORE);

           设置成CacheMode.IGNORE模式,在读取数据的时候,不和二级缓存交换数据,直接读取数据库。

这样数据库更新后hibernate缓存就会实时更新


  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值