我正在尝试在 JavaEE 中使用“SELECT FOR UPDATE NOWAIT”(使用 JPA)。我就是这样做的:
props.put("javax.persistence.lock.timeout", 0);
em.find(MyEntity.class, id, LockModeType.PESSIMISTIC_READ, props);
这很顺利,除了一件事:如果失败(无法获取锁),则抛出 PessimisticLockException 而不是 LockTimeoutException(如果设置了任何其他正超时则抛出),这会导致事务(JTA 事务)标记为回滚。
我已经尝试使用本机查询,但它产生了相同的结果。
我正在使用带有 EclipseLink 的 Weblogic 12.1(也尝试过 TopLink,没有区别)。
当执行失败时,是否有任何方法可以执行“SELECT FOR UPDATE NOWAIT”而不会在 JavaEE 中将 JTA 事务标记为回滚?