gpt4 book ai didi

jakarta-ee - JavaEE : 'SELECT FOR UPDATE NOWAIT' without marking the JTA transaction for rollback when fails?

转载 作者:行者123 更新时间:2023-12-03 12:25:31 25 4
gpt4 key购买 nike

我正在尝试在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com