我对很多数据做了一些处理,所以我做了一个循环。
@Transactional
@Override
public void processPayment(List<Long> paymentsId, PaymentModeEnum paymentMode) throws ProcessPaymentException{
...
processCreditCardPayment(payments);
}
private void processCreditCardPayment(List<Payment> payments) throws ProcessPaymentException {
for (Payment payment : payments) {
try {
//save to db
}catch (ProcessPaymentException ppe) {
}
}
}
ProcessPaymentException扩展了Exception
如果我循环播放10项,则在最后一项上发生错误。 一切都是回滚(我的所有项目)或只是错误的一个?
答案 0 :(得分:0)
在这种情况下,不会回滚任何内容。这是因为你发现了异常并且它没有通过Spring事务边界。
指示Spring Framework事务的推荐方法 交易工作要回滚的基础设施是 从当前正在执行的代码中抛出异常 交易的背景。 Spring Framework的交易 基础架构代码将捕获任何未处理的异常,因为它会冒泡 调用堆栈,并确定是否标记 回滚事务。