我正在尝试理解调用EntityManager.lock(entity, LockModeType.READ)的效果。对我来说,API文档听起来很混乱。
如果有两个并发线程,线程1调用lock(entity, LockModeType.READ),线程2是否仍然可以读写该实体?
到目前为止,我学到的:
JPA1中的锁类型READ与JPA2中的OPTIMISTIC相同。如果设置此类锁定,则EntityManager在提交事务之前检查版本属性,但不更新它。我找到了关于OPTIMISTIC锁模式的解释:链接。搜索OPTIMISTIC(READ)LockMode示例。 就我所知,在线程1中设置读锁对线程2 … n没有影响。所有其他线程仍然可以读写该实体。但是,当线程1中的事务提交且另一个线程已更新该实体时,线程1中的事务将被回滚。
我的理解是否正确?