我试图了解调用 EntityManager.lock(entity, LockModeType.READ) 的效果。API 文档对我来说听起来很混乱。
如果我必须并发线程并且线程 1 调用 lock(entity, LockModeType.READ),线程 2 仍然可以读写实体吗?
到目前为止我学到了什么:
JPA1 中的锁类型 READ 与 JPA2 中的 OPTIMISTIC 相同。如果设置了这样的锁,EntityManager 在提交事务之前检查版本属性,但不会更新它。我找到了对 OPTIMIISTIC 锁定模式的解释:Link。搜索 OPTIMIISTIC (READ) LockMode 示例。据我了解,在线程 1 中设置读锁对线程 2 ... n 没有影响。所有其他线程仍然可以读取和写入实体。但是当线程 1 中的事务提交并且另一个线程更新了实体时,线程 1 中的事务被回滚。
我理解正确吗?