gpt4 book ai didi

java - JPA实体在异常后没有被持久化

转载 作者:行者123 更新时间:2023-11-29 09:24:56 25 4
gpt4 key购买 nike

我遇到了以下问题:

我有 2 个类(class)(A 和 B)。类 A 有一个用 @Transaction(noRollBackFor = ExceptionB.class) 注释的方法 (method1) 从类 B 调用方法 2。ExceptionB 是一个未检查的 RunTimeException。

public class A {
...

@Resource
private B b;

@Transaction(noRollBackFor = ExceptionB.class)
public void method1() {

try {
b.method2();
} catch (ExceptionB e) {
// Change objects annotated with @Entity (must be persisted)
throw e;
}

}
}

@Transaction
public class B {
...

public void method2() {
...
throw new ExceptionB();
}
}

但是,当 B 类抛出异常时,Spring 拦截器获取异常并使用 B 类事务注释规则(没有 noRollBackFor 规则)并执行事务回滚。这样,在方法 1 中所做的所有更改都不会保留。我应该更改什么以防止回滚发生?

提前谢谢你。

最佳答案

好吧,我已经解决了我的问题。重点是类 B 由 @Transaction 注释,因此对于每个调用的公共(public)方法(例如 method2),都会创建一个没有 noRollBack 属性的新事务。这样,对于我的情况,解决方案是从类中取出 @Transaction 注释并将其仅添加到需要新事务的方法中,即 method2 没有注释。

就是这样!

关于java - JPA实体在异常后没有被持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3300282/

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