gpt4 book ai didi

java - @事务回滚循环

转载 作者:行者123 更新时间:2023-11-30 06:08:18 27 4
gpt4 key购买 nike

使用@Transactional 时,我在回滚事务方面遇到一些问题。我有以下代码:

@Transactional
public class A{

@Resource
Object obj;

public void insertMultiTable(){
for(Item item:items){
try{
obj.insertTableA();
obj.insertTableB();
} catch(Exception e){
// do somethings...
}
}
}
}

如您所见,我将执行 insertTableA 和 insertTableB,当两者都完成时我的过程就成功了。我有第一次和第二次就成功了。但在第三次,insertTableB将抛出异常,我只想回滚这个循环,第一次和第二次已插入数据库。我怎样才能做到呢?请帮忙...

最佳答案

将您的逻辑移至另一个服务并使用 @Transactional(propagation = Propagation.REQUIRES_NEW) 标记

这将使每个循环事务都是独立的。 (IE:第三个循环抛出异常只会回滚第三个循环,保留第一个和第二个循环结果已提交)

public class SubA {
@Resource
Object obj;

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void insert(Item i) {
try{
obj.insertTableA();
obj.insertTableB();
} catch(Exception e){
// do somethings...
}
}
}

现在在您的 A 类中调用此服务

@Transactional
public class A{

@Resource
SubA subA;

public void insertMultiTable(){
for(Item item:items){
subA.insert(item);
}
}
}

关于java - @事务回滚循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821235/

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