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!