作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在 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 事务)标记为回滚。
我试过使用原生查询,但它产生了相同的结果。
我将 Weblogic 12.1 与 EclipseLink 一起使用(也尝试了 TopLink,没有区别)。
有什么方法可以在执行失败时执行“SELECT FOR UPDATE NOWAIT”而不将 JTA 事务标记为在 JavaEE 中回滚?
最佳答案
请记录错误并为其投票。
您可能可以通过创建自己的 OraclePlatform 子类并覆盖 isLockTimeoutException() 来修复它。
您还可以将查询作为 DatabaseQuery 执行以避免回滚。
em.unwrap(Session.class).executeQuery(((JpaQuery)query).getDatabaseQuery())
关于jakarta-ee - JavaEE : 'SELECT FOR UPDATE NOWAIT' without marking the JTA transaction for rollback when fails?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688447/
我是一名优秀的程序员,十分优秀!