JPA 悲观锁与缓存机制详解
1. 悲观锁相关模式
1.1 悲观强制增量锁定(Pessimistic Forced Increment Locking)
PESSIMISTIC_FORCE_INCREMENT 模式用于获取悲观锁,即便实体仅被读取,该模式也会增加锁定实体的版本字段,无论实体是否有更改。它与悲观读锁和乐观写锁有一定重叠,例如当实体中存在非拥有的集合值关系且这些关系被修改时,强制增加版本字段可在关系间保持一定的版本一致性。
1.2 悲观范围(Pessimistic Scope)
对拥有关系的任何更改都会导致拥有实体的版本字段更新。在悲观锁定时,获取其他实体表中实体的排他锁会增加死锁发生的可能性。为避免这种情况,悲观锁定查询的默认行为是不对未映射到实体的表获取锁。若需要获取这些锁,可设置 javax.persistence.lock.scope 属性为 PessimisticLockScope.EXTENDED 。不过,通常应避免使用该属性,除非确实需要锁定那些难以通过其他方式锁定的表,并且在启用该属性前,需严格排序并深入理解映射和操作顺序,以确保不会导致死锁。
1.3 悲观超时(Pessimistic Timeouts)
JPA 虽未规范提供者如何支持悲观锁获取的超时模式,但定义了一个提示 javax.persistence.lock.timeout ,主流 JPA 提供者可能支持该提示。其值可以为 0,表示不等待锁,也可以是一个整数,表示等待锁的毫秒数。可以将其作为属性传递给接受锁模式和属性或提示映射的 <
超级会员免费看
订阅专栏 解锁全文
142

被折叠的 条评论
为什么被折叠?



