Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Realizando find() sem abrir uma transação.

Olá. Acabo de assistir a aula 3 do curso de JPA. Durante os exercícios surgiu a seguinte dúvida: Se em minha aplicação eu necessite apenas realizar um select em minha conta, ou seja, não irei alterá-los em nenhum momento, quero somente consultá-los, eu preciso abrir uma transação (através de getTransaction().begin())? Ou somente o find() é o suficiente? Existe algum efeito colateral se eu não realizar a consulta no contexto de persistência?

Obrigado!

4 respostas

Não é necessário abrir um transação para realizar o find().

solução!

Oi Douglas, Rafael,

vai funcionar sem TX, nesse caso, mas TXs tbm são para leitura!

Imagine seguinte: Uma transação está alterando um registro que vc está querendo ler (acesso concorrente). Vc deve ou não ver essa alteração que não foi consolidada ainda?

Para definir essas regras existe um nível de isolação (é o i do ACID) mas só quando tem um TX rodando, ok?

Tbm há ambientes (containers) que só abrem uma conexão por baixo dos panos com uma TX rodando. No Spring, por exemplo, vc tem uma anotação para marcar um TX como leitura.

Dependendo do banco que vc usa, isso pode melhorar o desempenho:

@Transactional(readOnly = true)

Espero ter ajudado.

abs Nico

Olá pessoal. Muito obrigado pela ajuda. Compreendido.

Abraços

Douglas, vou fechar o post. Qq duvida abre um novo, por favor.

abs e bom estudos, Nico