这个一般涉及到数据操作,比如同时操作两张表或多张表,有时操作并没有完成取消了或者出现了什么异常,造成一张表有数据但是另外一张表没有数据,这就会出现问题。
因此我们可以在操作方法上加这个@Transactional注解,这样如果没有成功就会数据回滚,不出现只有一张表有数据的情况。
需要注意的是加了这个注解后需要在启动类上加开启这个注解的注解:@EnableTransactionManagement
@Transactional
public void saveWithFlavor(DishDto dishDto) {
//保存菜品的基本信息到菜品表dish
this.save(dishDto);
Long dishId = dishDto.getId();//菜品id
//菜品口味
List<DishFlavor> flavors = dishDto.getFlavors();
flavors = flavors.stream().map((item) -> {
item.setDishId(dishId);
return item;
}).collect(Collectors.toList());
//保存菜品口味数据到菜品口味表dish_flavor
dishFlavorService.saveBatch(flavors);
}
@SpringBootApplication
@ServletComponentScan
@EnableTransactionManagement
public class ReggieApplication {
public static void main(String[] args) {
SpringApplication.run(ReggieApplication.class,args);
log.info("项目启动成功...");
}
}