如何正确地将多个实体一次存储到一个数据库中?

时间:2019-01-08 17:14:51

标签: java hibernate rest spring-boot

您可以显示一种将两个实体保存到数据库的更好方法吗? 我认为我的代码太糟糕了。 我收到一个包含两个实体的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()));

0 个答案:

没有答案