@Transactional сохранить для Springboot JPA - PullRequest
0 голосов
/ 05 октября 2019

Мне нужно реализовать метод entity save, который

  • сохраняет объект в базу данных
  • возвращает присоединенный объект
  • устанавливает entity.id для тела запроса
  • выполняет вызов к внешней службе
  • обновляет поле объекта 'externalId' соответствующим полем из ответа
  • сбрасывает объект в БД

откатывает транзакцию, если внешнийСлужбы отвечают с ошибкой.

Что я пытался сделать

    @Transactional
    public MyEntity save(MyEntity model) {
        // more complex logic here: save if not exists
        // omitted for brevity
        var savedEntity = recipientRepository.save(entity); 
        var createdExternalEntity = restClient.createExternalEntity(
                savedEntity); // assume savedEntity has savedEntity.id set at this point

        // update field for a newly created 
        savedEntity.setExternalId(createdExternalEntity.getId());

        return savedEntity;
    }

Проблема: savedEntity.setExternalId(createdExternalEntity.getId()); не работает

И я даже не пыталсяmock restClient.createExternalEntity и генерируем Exception, чтобы увидеть, действительно ли транзакция откатывается

1 Ответ

0 голосов
/ 12 октября 2019

Это была моя вина. savedEntity is attached Любое изменение его полей внутри @Transactional метода отражается в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...