У меня есть функция, которая изменяет две таблицы с использованием транзакции javax.
@Transactional //javax transaction
public PayoutTransaction createPayoutTxnAndUpdateDailyPayout(
PayoutTransaction payoutTransactionModel, List<DailyPayout> dailyPayouts) throws Exception {
try {
PayoutTransaction payoutTransaction =
(PayoutTransaction) payoutTransactionDao.save(payoutTransactionModel);
updateTransactionId(null, DailyPayoutStatus.PICKED, dailyPayouts);
return payoutTransaction;
} catch (Exception exc) {
LOGGER.error("Error while creating payout transaction with exception: {}",
CommonUtil.exceptionFormatter(exc));
throw exc;
}
}
Функция updateTransactionId
private void updateTransactionId(Long payoutId, DailyPayoutStatus dailyPayoutStatus,
List<DailyPayout> dailyPayouts) throws Exception {
List<Long> dailyPayoutIds = new ArrayList<>();
int retryCount = dailyPayouts.get(0).getRetryCount();
dailyPayouts.stream().forEach(dailyPayout -> dailyPayoutIds.add(dailyPayout.getId()));
if (!NullOrEmptyCheckerUtil.isNullOrEmpty(payoutId)) {
dailyPayoutDao.updatePayoutTransactionId(dailyPayoutIds, payoutId, DailyPayoutStatus.SUCCESS);
} else {
dailyPayoutDao.updateDailyPayoutStatus(dailyPayoutIds, DailyPayoutStatus.NOT_PICKED,
retryCount + 1);
}
}
И теперь мое сохранение также содержит трагическую пружину, подобную этой
@Override
@Transactional
public Object save(final Object object) {
Serializable id = hibernateTemplate.save(object);
return get(object.getClass(), id);
}
Теперь, если что-то ломается в моей функции updateTransactionId, оно не выполняет откат моей функции сохранения.Насколько мои знания родительской транзакции (транзакция javax) должны переопределять мою весеннюю транзакцию и откатывать данные функции сохранения, чего не происходит.