我们在写业务逻辑时,对于有些方法逻辑中,可能会抛异常,比如增删改查的dao层接口throws异常,那在service层中调用后我们需要进行try catch捕获异常,不捕获的话最终也需要在controller层捕获;这里就需要关注一个问题:try catch 语句会让事务失效
异常失效如下例子:
@Service
public class service implements iservice{
@Transactional
public void update(Data data){
try{
//修改相关逻辑
}
catch (Exception e){
e.printStackTrace();
}
}
}
使用try catch后,相当于就是捕获了异常,事务管理就无感知有异常抛出了,相当于把异常吃掉了,这样事务管理就认为是程序没有出异常了。这样假设在修改接口中,涉及到了异常,事务就会失效,失效则不会回滚,数据就会被修改,无法回到修改前状态。
解决方案:
需要在catch中进行运行时异常的抛出
@Service
public class service implements iservice{
@Transactional
public void update(Data d