1
resposta

Dùvida do @Transactional para o POST

Olá,

Percebi que usamos a anotação @Transactional para fazer o commit no nosso banco de dados quando é feito algum update.

Entendo que não houve a necessidade do transactional no método de cadastrar um novo tópico porque usamos o save do jpa, certo? Porém no meu código ele não salva no banco de dado.. ele chega a cadastrar o meu tópico, mas logo em seguida quando vou dar um get desse tópico com o ID novo gerado, ele não encontra, ou seja, esse tópico que postei no método cadastrar não cehga a ser salvo. No ententanto, se eu não filtro por esse ID novo, apenas faço GET de TODOS os tópicos, ele traz o meu tópico novo. Não entendi pq isso acontece..

    @PostMapping
    public ResponseEntity<TopicoDTO> cadastrar(@RequestBody @Valid TopicoForm form, UriComponentsBuilder uriBuilder) {
        Topico topico = form.converter(cursoRepository);
        topicoRepository.save(topico);

        URI uri = uriBuilder.path("/topicos/{id}").buildAndExpand(topico.getId()).toUri();
        return ResponseEntity.created(uri).body(new TopicoDTO(topico));
    }

Minha dúvida é como poderia fazer para esse novo tópico gerado ser salvo no banco de dados e eu conseguir consultá-lo filtrando pelo ID através do GET?

Poderia ser usado o @Transational como usamos no Update? tentei essa opção mas não funcionou comigo.

Obrigado

1 resposta

Oi Arthur,

No caso do método cadastrar o Spring vai comitar a transação após o método ser finalizado, caso não ocorra alguma exception, sendo que após isso o registro deveria estar normalmente no banco de dados.

Como que você fez para pesquisar o tópico pelo id, após o cadastro dele?