調用本類中的方法,事務回滾失敗的問題。
錯誤調用方式:
@Service public class BaseServiceImpl implements BaseService { @Override @Transactional public void saveBaseInfo() { BaseRequestBean baseRequestBean = new BaseRequestBean(); saveA(baseRequestBean); saveB(); } private void saveA(BaseRequestBean baseRequestBean){ baseDao.insert(baseRequestBean); } private void saveB(){ base222Dao.insert(); } }
錯誤原因:
調用方法saveA 和 saveB 是通過 實例對象調用的,而非Spring代理的Bean。
正確調用方法:
@Service public class BaseServiceImpl implements BaseService { @Autowired BaseServiceImpl baseService; @Override @Transactional public void saveBaseInfo() { BaseRequestBean baseRequestBean = new BaseRequestBean(); baseService.saveA(baseRequestBean); baseService.saveB(); } private void saveA(BaseRequestBean baseRequestBean){ baseDao.insert(baseRequestBean); } private void saveB(){ base222Dao.insert(); } }
原因:
通過注入Bean調用,即可。