我在使用WAS 8.0.7的JPA中遇到了乐观锁定问题。我有一个使用EJB3+JPA2 (SQL Server,XA数据源)的Web项目。我有两个JPA实体X和Y。
X与Y具有OneToMany关系。
两个实体都有一个@Version字段(并且在相应的SQL表中有一个version列)。
虽然这是默认设置,但我在persistence.xml中设置了一个<property name="openjpa.LockManager" value="version"/>
我使用容器管理事务在无状态EJB的方法x()中持久化实体X。
方法x()创建并持久化一个实体X,并继续在X上执行一些业务处理,直到它返回。
假设方法x()是从几个web请求中调用的。
第一个请求调用x()并创建一个X实体。
同时,如果第二个请求调用方法x(),它会阻塞,直到第一个请求完成。
这是使用乐观锁定的适当行为吗?第二个请求是否应该继续并抛出OptimisticLockException,以防出现并发更新?
相反,它只是像使用悲观锁定一样阻塞。
发布于 2013-09-19 22:06:54
检查数据源隔离级别设置(http://pic.dhe.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frdat_isolevtab.html)
高隔离级别可能会锁定所有引用的表(例如,selected),直到事务结束。
https://stackoverflow.com/questions/18892424
复制相似问题