java - hibernate的session怎样确保与数据库保持一致?

 so的青春 发布于 2022-10-27 11:52

hibernate里的session一级缓存,当一个用户通过get()load()等方法从数据库拿到某条数据,数据被缓存,此时第二个用户修改该条数据,数据库该数据被修改,此时第一个用户再get()该数据,从缓存中拿到数据,拿到的并不是实时的数据而是缓存的数据。这样想对不对?应该怎么解决?

3 个回答
  • 怎样拿到最新的数据楼上都已经说了。我的建议是首先session对应一个数据库事务,事务的执行时间应该尽可能的短。第二,对于在session期间数据在其它地方发生改变,官方的解决方法应该是用锁机制,对于可容忍一定的事务失败回滚的情况可使用乐观锁,否则可考虑悲观锁,由楼主在实际应用中自己权衡使用哪一种方式。

    2022-10-27 22:17 回答
  • Session接口中定义了一个refresh()方法,调用该方法,调用get()或load()方法之前,调用该方法可以拿到最新的数据;

    2022-10-27 22:27 回答
  • 是这样的,所以一般session很短小,因为session关闭重开所有cache就都没了

    在session内可以用evict()或clear()刷新缓存

    2022-10-27 22:35 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有