您可以使用特定模式在对象上应用锁定。
- 实体经理:
entityManager.lock(entity, LockModeType.OPTIMISTIC);
- 查询:
query.setLockMode(LockModeType.OPTIMISTIC);
- NamedQuery:lockMode元素
锁定模式
OPTIMISTIC是同义
READ&
OPTIMISTIC_FORCE_INCREMENT来
WRITE。
编辑: 从文档
如果事务T1要求在版本控制对象上锁定类型为LockModeType.OPTIMISTIC的锁,则实体管理器必须确保不会发生以下两种现象:
*P1(脏读):事务T1修改一行。然后,另一个事务T2在提交或回滚之前读取该行并获取修改后的值。事务T2最终成功提交;T1提交或回滚以及在T2提交之前还是之后都这样做并不重要。
- P2(不可重复读取):事务T1读取一行。然后,另一个事务T2在T1提交之前修改或删除该行。两项交易最终都成功提交。
锁定模式必须始终防止现象P1和P2。



