使用@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将抛出异常,我只想要回滚只有这个循环第一次和第二次插入数据库。我怎么能这样做?请帮忙......
答案 0 :(得分:0)
将您的逻辑移至其他服务并使用@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);
}
}
}