0

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

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

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

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

4

1 回答 1

1

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

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

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

于 2019-05-15T07:39:33.163 回答