首页 > 解决方案 > 二级休眠缓存 - 使对象在会话工厂级别可用?

问题描述

我对如何在休眠中使用第一级和第二级缓存有所了解。有很多与此相关的问题-是的,我同意

但我的困惑是。在第一级缓存中,除非我提交事务,否则我的数据将不会保留在数据库中,因此其他会话在此之前不会知道此更改。如果二级缓存将实体带到会话工厂级别!这是否意味着即使在我提交事务之前,我在一个会话中的更改也可以被其他会话使用?

使用二级缓存时何时会更新 dB?第一,它会在结束交易时发生

我在这个主题中提到了很多讨论,但我没有找到确切的答案!

标签: hibernatesecond-level-cachefirst-level-cache

解决方案


在您提交事务之前,您的更新绝对不会与其他会话共享。如果发生这样的事情,这是一个严重的错误。

有或没有 2LC 的 DB 提交没有区别,除了 2LC 可能在 DB 完全提交之前使事务失败这一事实。JPA 和 Hibernate 的非 JPA 事务都执行两阶段提交,其中首先通知所有资源事务正在提交,获取一些锁等,如果所有资源都成功,则持久化/发布更改。

事务缓存与常规数据库没有太大区别:它假装更改已经应用,但对其他事务隐藏它们;这称为多版本并发控制(MVCC)。


推荐阅读