Javax-транзакция не выполняет откат, если используется с Hibernate-транзакцией - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть функция, которая изменяет две таблицы с использованием транзакции 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) должны переопределять мою весеннюю транзакцию и откатывать данные функции сохранения, чего не происходит.

...