这个一般涉及到数据操作,比如同时操作两张表或多张表,有时操作并没有完成取消了或者出现了什么异常,造成一张表有数据但是另外一张表没有数据,这就会出现问题。
因此我们可以在操作方法上加这个@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("项目启动成功...");
}
}
当进行多表操作时,如果出现异常或中途取消,可能导致数据不一致。通过添加@Transactional注解并启用事务管理,可以实现回滚机制,保证数据完整性。例如,在保存菜品及其口味时,如果保存菜品成功但保存口味失败,事务回滚将避免数据不匹配的问题。
718

被折叠的 条评论
为什么被折叠?



