【发布时间】:2012-04-05 14:07:10
【问题描述】:
如果两个事务(都在 RR 隔离级别)请求相同的项目,该项目是 2 级缓存,然后他们修改并存储该项目。现在,为了读取该项目,他们没有运行任何 SQL,因为它已被缓存;那么在这种情况下,他们真的会启动数据库事务吗?当他们提交更改时,他们会遇到丢失更新的问题吗?
【问题讨论】:
标签: java hibernate second-level-cache transaction-isolation
如果两个事务(都在 RR 隔离级别)请求相同的项目,该项目是 2 级缓存,然后他们修改并存储该项目。现在,为了读取该项目,他们没有运行任何 SQL,因为它已被缓存;那么在这种情况下,他们真的会启动数据库事务吗?当他们提交更改时,他们会遇到丢失更新的问题吗?
【问题讨论】:
标签: java hibernate second-level-cache transaction-isolation
从悲观的角度来看:
如果二级缓存被配置为参与事务,那么只有第一个获得写锁的缓存才能修改缓存对象,然后将更改写入数据库。当第二个事务想要获取写锁时,它必须等到第一个事务结束并释放它。
使用乐观锁定,我猜应该会发生并发修改异常(或类似名称),并且第二个事务将重试该操作。
【讨论】: