Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Funcionamento do @Transactional no Put em uma camada de serviço

Tenho algumas perguntas do transactional e do Repository:

Quando utilizamos um metodo que resgata informações de um registro (.getOne()) e atualizamos o objeto que foi populado com informações do banco e utilizamos o @Transactional, esse @Transactional verifica se teve alguma alteração no Objeto TOPICO e commita as informações no banco, isso? Como ele faz isso?Como ele sabe que esse objeto não é um objeto simples? O objeto Topico seria como se fosse um ponteiro, uma referencia do registro que esta no banco, é isso?

Podemos utilizar essa mesma logica quando resgatamos uma lista de registros? Atualizar varios ao mesmo tempo com o @Transactional com algum valor em comum?

O @Transactional esta sendo usado no Controller, tem que ser padrão? Não poderia ser utilizado na classe que vc utiliza o repository(No projeto foi utilizado o repository na classe do Topico)? Se tivesse uma camada de serviço por exemplo que tem uma chamada do repository e o objeto foi atualizado nessa camada e retornado para a camada do Controller, eu poderia colocar o @Transactional na camada do serviço?

1 resposta
solução!

Oi Thiago,

O @Transactional pode ser utilizado no controller ou na camada de service, conforme você mencionou.

Todas as modificações realizadas em uma entidade JPA(1 ou várias) serão propagadas para o banco de dados ao finalizar o método sem ocorrer uma exception, que é quando o commit será realizado.

Isso tem a ver com a JPA em si e não com o Spring, pois ao realizar uma consulta em um repository o Spring está utilizando a JPA por "baixo dos panos", e a JPA que controla o ciclo de vida das entidades.

Bons estudos!