Hibernate - Spring - 避免回滚

时间:2018-02-06 20:29:58

标签: spring hibernate jpa

我需要在两个不同的表中插入数据。在第一个表(save1函数)中插入后,我在数组String上启动一个循环,其中foreach元素i调用save2函数。在save2函数中可能会引发ConstraintViolationException。我可以通过Transacational看到我的注释方法。

我希望方法save2中引发的异常不会传播save1方法的回滚。可能吗?

@Service
@Transactional(propagation = Propagation.REQUIRED, value = "transactionManager")
public class MyService extends BaseService {


    public void insert(AppFileForm appFileForm) {
        try {
            _insert(appFileForm);
            setStatusOk();
        } catch (IOException ioe) {
            setStatusKo(msg.getProperty("file.upload.error"));
        } catch (Exception e) {
            e.printStackTrace();
            setErrorFromException(e);
        }
    }

    public void _insert(){
        save1();
        save2();
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor={Exception.class})
    public void save1(){
        for(String s: myArray){
            save2();
        }
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW, noRollbackFor={Exception.class})
    public void save2(){

    }
}

dao方法不相关

public void save(MyClass mc) throws Exception{
    em.persist(mc);
}

1 个答案:

答案 0 :(得分:3)

从同一组件的另一个方法调用时,

@Transactional注释无效。