1
resposta

[Dúvida] Sobre a utilização de @Transactional

Olá, como vai?

Uma dúvida me surgiu em relação a utilização da anotação @Transactional em métodos GET. Qual é a diferença entre não usar a anotação e utilizar a anotação "@Transactional(readOnly = true)". Qual delas é a boa prática?

Agradeço desde já!

1 resposta

Olá, Felipe! Espero que esteja tudo bem com você.

Sua pergunta é muito pertinente e é um ponto importante quando estamos lidando com transações em aplicações Spring Boot.

A anotação @Transactional é usada para definir o escopo de uma única transação de banco de dados. Ela garante que o método anotado seja executado dentro de uma transação de banco de dados.

Quando você usa @Transactional(readOnly = true), está indicando que a transação não modificará nenhum estado no banco de dados. Isso é útil para operações de leitura, pois pode ajudar o provedor de persistência a otimizar a operação. Por exemplo, o Hibernate, um popular provedor de persistência em Java, pode evitar a verificação de sujeira em transações somente de leitura.

Agora, se você não usar a anotação @Transactional em um método GET, o Spring não executará o método em uma transação de banco de dados. Isso significa que se a operação de leitura for interrompida por qualquer motivo, não haverá como voltar atrás.

Então, em termos de boas práticas, é recomendado usar @Transactional(readOnly = true) para operações de leitura para obter os benefícios de otimização mencionados, a menos que você tenha um motivo específico para não querer que a operação de leitura seja transacional.

Por exemplo, em seu caso, ao listar os médicos, você pode usar @Transactional(readOnly = true) para garantir que a operação de leitura seja eficiente e segura.

Espero ter ajudado e bons estudos!