我对休眠中如何使用第一级和第二级缓存有一些了解。有很多与此相关的问题-是的,我同意
但是我的困惑是。 在第一级缓存中,除非我提交事务,否则我的数据将不会保留在db中,因此在此之前其他会话将不会知道此更改。 如果二级缓存将实体带到会话工厂级别! 这是否意味着即使在我提交交易之前,我在一个会话中所做的更改也可以被其他会话使用?
在第一次使用二级缓存?? 时何时更新到dB
我提到了该主题的许多讨论,但找不到确切答案!!
答案 0 :(得分:1)
在提交事务之前,您的更新绝对不会与其他会话共享。如果发生这种情况,那是一个严重的错误。
带有或不带有2LC的DB提交没有什么区别,除了2LC可能在完全提交DB之前使事务失败。 JPA和Hibernate的非JPA事务都执行两阶段提交,即首先通知所有资源已提交事务,获取一些锁等,如果所有资源成功,则更改将被保留/发布。
事务缓存与常规数据库没有太大区别:它假装已经应用了更改,但对其他事务隐藏了更改;这就是所谓的多版本并发控制(MVCC)。