Я использую данные Spring и Spring JPA.У меня есть один метод, который обновляет одну таблицу базы данных.
@Autowired InvoiceClient;
@Override
@Transactional
public String doBilling(String x){
//get date from TableOne
Bill bill = billsRepository.getBill(x);
if(bill.isPaid()){
generateInvoice();
}
bill.setPaymentDate(new Date());
return "SUCCESS";
}
generateInvoice - это не транзакционный метод, который вызывает метод @Transactional из другого сервиса.
public void generateInvoice(){
invoiceClient.generateInvoice();//this is @Transactional, make changes in TableTwo
}
В случае любого исключения в generateInvoiceМетод всей транзакции откатывается.Теперь я хочу добавить еще один метод, который будет иметь список номеров счетов.Я вызываю метод doBilling в цикле, чтобы выполнить выставление счетов для всех счетов.
@Override
@Transactional(readOnly = false, rollbackFor = {Throwable.class}, propagation = Propagation.REQUIRED)
public String doBillingForAll(List<String> tx){
for(String x: tx){
doBilling(x);
}
}
Но теперь, в случае каких-либо исключений в методе doBilling, все методы setPayment откатываются, но generateInvoice сохраняется.Я хочу откат генерировать счет-фактуру также.Как я могу это сделать?