Я хочу откатить исключение в области контроллера, потому что я вызываю некоторые службы в контроллере и хочу сохранить эти службы независимыми.Мой код вроде:
@RestController
@RequestMapping("/admin/corporation")
public class AdminCorporationController {
private final AdminCorporationService adminCorporationService;
private final OperateRecordService operateRecordService;
private final AdminIdentityService adminIdentityService;
@Autowired
public AdminCorporationController(AdminCorporationService adminCorporationService, OperateRecordService operateRecordService, AdminIdentityService adminIdentityService) {
this.adminCorporationService = adminCorporationService;
this.operateRecordService = operateRecordService;
this.adminIdentityService = adminIdentityService;
}
@HasRole({ROLE_SUPER_ADMIN, ROLE_MAIN_ADMIN})
@PostMapping("/addCorporation")
public Map<Object, Object> addCorporation(@RequestBody JSONObject jsonObject) throws ExecutionException, InterruptedException {
Corporation corporation = (Corporation) JSONObject.toBean(jsonObject.getJSONObject("corporation"), Corporation.class);
CorporationStaff corporationLeader = (CorporationStaff) JSONObject.toBean(jsonObject.getJSONObject("corporationLeader"), CorporationStaff.class);
//add Corporation method
CompletableFuture<String> addCorporationFuture = adminCorporationService.addCorporation(corporation);
corporationLeader.setCorporationId(addCorporationFuture.get());
//for example, exception happened in this service method, I want to roll back the two serivce method together.
//add Corporation Staff method
CompletableFuture<Void> addIdentitiesFuture = adminIdentityService.addIdentities(new CorporationStaff[]{corporationLeader}, IDENTITY_TYPE_CORPORATION_STAFF);
CompletableFuture.allOf(addCorporationFuture, addIdentitiesFuture).get();
return ResponseUtil.success(null, null);
}
}
Текущая ситуация такова, что я могу откатить только один из методов.Если Корпорация успешно добавлена, но при добавлении Персонала происходит сбой, информация Корпорации по-прежнему добавляется в базу данных, но я хочу откатить добавленную информацию Корпорации, если Персонал не удалось добавить.Есть какой-либо способ сделать это?Большое спасибо!:)