Как сделать откат с транзакционной аннотацией - PullRequest
2 голосов
/ 14 июля 2020

Я пытаюсь выполнить откат транзакции в своих методах. Я намеренно делаю вставку, чтобы не узнать. Но я не вижу отката назад. Пожалуйста, помогите то, что мне не хватает.

@Service
public class ModesService implements IModesService{

ChargeRuleDao chargeRuleDao;

public ModesService(ChargeRuleDao chargeRuleDao){
    this.chargeRuleDao = chargeRuleDao;
}

@Override
@Transactional(propagation = Propagation.REQUIRED)
public void process(ChargeRule chargeRule){
    chargeRuleDao.deleteShippingChargeAttr(shippingChargeRuleID);
    chargeRuleDao.deleteShippingCharge(shippingChargeRuleID);
    chargeRuleDao.deleteShippingChargeDest(shippingChargeRuleID);

    //Delete
    chargeRuleDao.insertShipChargeFeedRule(chargeRule);
        
}

В классе DAOImpl у меня есть такие методы, как ниже, для всех удалений и вставок.

@Override
public int deleteShippingChargeAttr(String test) {
    MapSqlParameterSource params = new MapSqlParameterSource();
    params.addValue("ABC" "ABC", Types.VARCHAR);
    return jdbcTemplate.update(DELETE_QUERY, params);

}

Ответы [ 2 ]

2 голосов
/ 14 июля 2020

Вы можете попробовать @Transactional(rollbackFor = XYZException.class). XYZException должно быть исключением, которое должно заключать в себя все исключения / исключения, для которых вы хотите откатить транзакцию.

1 голос
/ 14 июля 2020

Откат выполняется по умолчанию для каждого неотмеченного исключения. Это означает, что вам нужно выбросить какое-то непроверенное исключение, например,

throw new NullPointerException();

в вашем insertShipChargeFeedRule (chargeRule);

подробнее о @Transactional здесь https://javamondays.com/spring-transactions-explained/

...