您可以显示一种将两个实体保存到数据库的更好方法吗? 我认为我的代码太糟糕了。 我收到一个包含两个实体的DTO(它们之间是一对一的关系)。
我验证这些实体中的字段。如果收到错误消息,则不保存任何内容。
我的逻辑: 1.我需要保存第一个实体; 2.设置从第一个实体到第二个实体的ID; (如果保存一个实体,我会收到ID。这就是为什么我不能立即做到这一点) 3.保存第二个实体。 4.如果收到错误消息,则删除第一个保存的实体。
@PostMapping()
public ResponseEntity<?> create(@Valid @RequestBody DTOClient dtoClient) {
ResponseEntity<?> responseEntity = new ResponseEntity<>(HttpStatus.BAD_REQUEST);
Optional<Client> clientFromDB = Optional.empty();
Optional<Skill> skillFromDB = Optional.empty();
try{
clientFromDB = Optional.ofNullable(this.clientService.save(dtoClient.getClient()));
dtoClient.getSkill().setClient(clientFromDB.get());
skillFromDB = Optional.ofNullable(this.skillService.save(dtoClient.getSkill()));
if (clientFromDB.isPresent() && skillFromDB.isPresent()) {
responseEntity = new ResponseEntity<>( HttpStatus.OK);
}
}catch (RuntimeException ex){
clientService.deleteById(clientFromDB.get().getId());
}
return responseEntity;
}
谢谢您的帮助! 更新。 现在,我不需要检查此异常。 当我这样做时,我看到两个对数据库的插入请求。这是对的吗? 我可以一个请求吗?
dtoClient().getSkill().setClient(dtoClient().getClient())
skillFromDB = Optional.ofNullable(this.skillService.save(dtoClient.getSkill()));