背景
SpringMVC开发,在服务实现类的前面加的是注解 @Transactional
,
引用自 import org.springframework.transaction.annotation.Transactional;
实现类的一个方法需要对两张表进行插入操作。
问题
其中一个插入操作的sql语句有问题,另一个没问题。
在测试时,没问题的sql语句数据成功添加到表中,但有问题的sql 语句的数据没有添加到表中;
想要的时两个操作要么同时成功,要么都不成功。
解决
当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。
在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚。
详情可参考
springmvc 事务回滚说明