我們都知道,@Transactional要放在service層,並且只需要放到最外層的方法上就可以了。
controller層使用@Transactional注解是無效的。但是可以在controller層方法的catch語句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語句,手動回滾,這樣上層就無需去處理異常
@RequestMapping(value = "/delrecord", method = {RequestMethod.GET})
@Transactional(rollbackFor = Exception.class)
public String delRecord(HttpServletRequest request) {
try {
//省略業務代碼……
} catch (Exception e) {
log.error("操作異常",e);
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//contoller中增加事務
return failure("操作失敗!");
}
}