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

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

阅读 4.9k
3 个回答

是这样的,所以一般session很短小,因为session关闭重开所有cache就都没了

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

Session接口中定义了一个refresh()方法,调用该方法,调用get()或load()方法之前,调用该方法可以拿到最新的数据;

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题