这是我的春季启动应用程序:
@SpringBootApplication
@EnableTransactionManagement(proxyTargetClass=true)
public class WhizhopApplication {
public static void main(String[] args) {
SpringApplication.run(WhizhopApplication.class, args);
}
}
这是我的服务:
@Service
public class OrderService {
@Autowired
BillRepository billRepo;
@Transactional(rollbackFor = Exception.class)
public BaseDTO saveKot(BillDTO billDto) {
try{
//bussiness logic
billRepo.save();
}catch (Exception e) {
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
}
}
如果发生任何异常,则不会回滚事务。
答案 0 :(得分:1)
如果您希望使用@Transactional
处理异常,则不应该捕获异常。
另请注意:
@Transactional
仅适用于公共方法答案 1 :(得分:0)
将业务逻辑提取到由while (i in nrow(DT)) {
if(DT$var[i]>value){
DT_aux[i]=DT[i]
i<-i+1
}
}
Error in if (DT$value[i] > 45) { : argument is of length zero
注释的单独方法中,并从@Transactional(rollbackFor = Exception.class)
中删除注释。
saveKot
答案 2 :(得分:0)
默认情况下,只有Runtime execption才会从@Transactional回滚,如果要更改此行为,可以将rollBackFor
参数添加到注释中
@Transactional(的rollbackFor = {MyException.class})