如果与休眠事务一起使用,则javax事务不会回滚

时间:2018-09-27 07:12:22

标签: java spring hibernate spring-transactions

我有一个函数,该函数使用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函数中的任何内容中断,则不会对我的save函数进行回滚。 据我所知,父事务(javax事务)应该覆盖我的Spring事务,并且应该回滚未发生的保存功能数据。

0 个答案:

没有答案