拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 事务回滚,因为它已被标记为仅回滚-UnexpectedRollbackException

事务回滚,因为它已被标记为仅回滚-UnexpectedRollbackException

白鹭 - 2022-02-12 2119 0 0

我有这样的代码:

@Service
public class AService {


      public void methodA() {
           try {
               methodB();
            } catch (Exception e) {
               methodC(e);
            }
       }

 }

方法B 正在从数据库中读取。如果发生在数据库中,methodC 正在写入例外。出于某种原因,当方法 B 抛出错误时,方法 C 中的写入不起作用,我得到 - UnexpectedRollbackException:事务回滚,因为它已被标记为仅回滚。

将不胜感激任何建议,谢谢!

uj5u.com热心网友回复:

如果在 DB 访问期间出现例外,Hibernate通常会将完整事务标记为rollbackOnly,即使有人会通过@Transactional(noRollbackFor=Exception.class)注释属性显式尝试避免这种行为

所以在这些情况下,需要有一个不同的解决方案,例如为两个方法呼叫设定单独的事务。

(类似问题:处理大资料插入的sql例外

uj5u.com热心网友回复:

我假设您@Transactional在内部某处有一个由 Spring( )管理的事务methodB在 Spring 中,当RuntimeException在该事务中抛出a 时,该事务被标记为回滚

来自 Spring 档案:

请参阅:https : //docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/transaction.html#transaction-declarative-rolling-back

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *