0

我在使用 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 吗?

相反,它就像使用悲观锁定一样阻塞。

4

1 回答 1

0

检查您的数据源隔离级别设置(http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frdat_isolevtab。 html )

高隔离杠杆可能会锁定select事务中引用的所有表(例如 ed),直到它结束。

于 2013-09-19T14:06:54.187 回答