簡體   English   中英

如何使用事務注釋進行回滾

[英]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 應該是一個異常,它應該包含您想要回滾事務的所有異常/異常。

默認情況下,每個未經檢查的異常都會發生回滾。 這意味着您需要拋出某種類型的未經檢查的異常,例如

throw new NullPointerException();

在您的 insertShipChargeFeedRule(chargeRule);

更多關於@Transactional 這里https://javamondays.com/spring-transactions-explained/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM