我需要在两个不同的表中插入数据。在第一个表(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);
}
答案 0 :(得分:3)
@Transactional
注释无效。