根据JPA 2.1规范......
锁定模式
PESSIMISTIC_READ
,PESSIMISTIC_WRITE
和PESSIMISTIC_FORCE_INCREMENT
用于立即获得长期 数据库锁。
我认为,无论使用什么锁模式,悲观锁都会在数据库上触发SELECT ... FOR UPDATE
SQL。现在有三个问题:
SELECT ... FOR UPDATE
已锁定行。除锁定它的事务外,任何其他事务都无法更新锁定的行吗?答案 0 :(得分:2)
对于问题1和2,您的假设是正确的:
是 - 悲观锁通常使用SELECT ... FOR UPDATE
,因为大多数数据库和JPA实现仅支持这种类型的锁。在这种情况下,READ和WRITE块之间没有区别,只要两者都表现为WRITE锁,JPA规范就允许它。
是 - 任何其他交易都无法修改锁定的行。在WRITE锁定的情况下(大多数时间也用于READ锁定 - 请回答1),在释放锁定之前也无法读取锁定的行。请注意,同一个表中的其他未锁定行可以自由阅读和修改。
还要回答问题3: