如何使用事务注解进行回滚

How to do Rollback with Transactional Annotation

我正在尝试在我的方法中执行事务性回滚。我故意让插页找不到。但我没有看到它被回滚。请帮助我缺少什么。

@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 class 中,我有如下方法用于所有删除和插入操作。

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

}

你可以试试@Transactional(rollbackFor = XYZException.class)。 XYZException 应该是一个异常,它应该包装您要回滚事务的所有 exceptions/exception。

默认情况下,每个未经检查的异常都会发生回滚。这意味着您需要抛出某种类型的未经检查的异常,例如

throw new NullPointerException();

在您的 insertShipChargeFeedRule(chargeRule) 中;

更多关于@Transactional 的信息https://javamondays.com/spring-transactions-explained/