我在使用 WAS 8.0.7 对 JPA 进行乐观锁定时遇到问题。我有一个使用 EJB 3 + JPA 2(SQL Server、XA 数据源)的 Web 项目。我有两个 JPA 实体 X 和 Y。
X 与 Y 具有 OneToMany 关系。
两个实体都有一个 @Version 字段(并且在相应的 SQL 表中有一个版本列)。
虽然它是默认设置,但我<property name="openjpa.LockManager" value="version"/>
在 persistence.xml中设置了一个
我使用容器管理事务在无状态 EJB 的方法 x() 中保留实体 X。
方法 x() 创建并持久化一个实体 X 并继续对 X 做一些业务处理,直到它返回。
假设从多个 Web 请求调用方法 x()。
第一个请求调用 x() 并创建一个 X 实体。
同时,如果第二个请求调用方法 x() 它会阻塞直到第一个请求完成。
这是使用乐观锁定的适当行为吗?如果有并发更新,第二个请求不应该继续并抛出 OptimisticLockException 吗?
相反,它就像使用悲观锁定一样阻塞。