如何使用事务注解进行回滚
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/
我正在尝试在我的方法中执行事务性回滚。我故意让插页找不到。但我没有看到它被回滚。请帮助我缺少什么。
@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/