hibernate - 二级休眠缓存 - 使对象在会话工厂级别可用?
问题描述
我对如何在休眠中使用第一级和第二级缓存有所了解。有很多与此相关的问题-是的,我同意
但我的困惑是。在第一级缓存中,除非我提交事务,否则我的数据将不会保留在数据库中,因此其他会话在此之前不会知道此更改。如果二级缓存将实体带到会话工厂级别!这是否意味着即使在我提交事务之前,我在一个会话中的更改也可以被其他会话使用?
使用二级缓存时何时会更新 dB?第一,它会在结束交易时发生
我在这个主题中提到了很多讨论,但我没有找到确切的答案!
解决方案
在您提交事务之前,您的更新绝对不会与其他会话共享。如果发生这样的事情,这是一个严重的错误。
有或没有 2LC 的 DB 提交没有区别,除了 2LC 可能在 DB 完全提交之前使事务失败这一事实。JPA 和 Hibernate 的非 JPA 事务都执行两阶段提交,其中首先通知所有资源事务正在提交,获取一些锁等,如果所有资源都成功,则持久化/发布更改。
事务缓存与常规数据库没有太大区别:它假装更改已经应用,但对其他事务隐藏它们;这称为多版本并发控制(MVCC)。
推荐阅读
- azure-ad-b2c - 在“CombinedSignInAndSignUp”Azure B2C 上添加额外的输入控件
- firebase - 如何通过安全规则禁止更新 Firestore 文档中的特定字段?
- vim - 将命令粘贴到 macvim 不会解释为命令
- flutter - 在我的布局颤动中间添加列表视图
- html - 图像上的 SVG 剪辑路径在 iOS 上不起作用
- scheme - 在 scp 中评估 (ff) 的替代模型
- ios - 创建一个通用函数,将视图控制器类型作为参数并返回基于该类型的自定义视图控制器
- java - 错误告诉我运行类中的方法未定义,即使它是
- node.js - 获取正在进行的传出 Twilio 呼叫的状态
- python - 如何在 Python 中使用 sklearn 对模型进行单一预测?