Как правильно сохранить несколько объектов в одном переходном процессе в базе данных? - PullRequest
0 голосов
/ 08 января 2019

Можете ли вы показать лучший способ сохранить два объекта в базе данных? Я думаю, что мой код ужасен. Я получаю DTO с двумя сущностями (между ними отношение один к одному).

Я проверяю поля в этих объектах. Если я получаю ошибку, я не должен ничего сохранять.

Моя логика: 1. Мне нужно сохранить первую сущность; 2. Установите идентификатор от первого объекта ко второму объекту; (Я получу идентификатор, если сохраню сущность. Вот почему я не могу сделать это мгновенно) 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()));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...