如果两个事务(都在 RR 隔离级别)请求相同的二级缓存项目,然后它们修改并存储该项目。现在,为了读取该项目,他们没有运行任何 SQL,因为它已被缓存;那么在这种情况下,他们真的会开始数据库事务吗?当他们提交更改时,他们会遇到丢失更新的问题吗?
最佳答案
从悲观的角度来看:
如果二级缓存被配置为参与事务,那么只有第一个获得写锁的缓存才能修改缓存对象,然后将更改写入数据库。当第二个事务想要获取写锁时,它必须等到第一个事务结束并释放它。
使用乐观锁定,我猜应该会发生并发修改异常(或类似名称),并且第二个事务将重试该操作。
关于java - Hibernate二级缓存和RR事务隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10030175/