1
resposta

Dúvida no FetchMode.EAGER

Fiquei com dúvida porque foi utilizado o método EAGER do FetchMode e não o LAZY, se quando chamarmos esta tabela, ela trará todos seus relacionamentos junto, e pelo que entendi não é isso que queremos.

E também, como no JPA só conseguimos acessar o relacionamento quando o EntityManager estiver aberto (persistido que se fala?) , todo comando que eu utilizo o EntityManager no spring por baixo dos panos ele abre e fecha o EntityManager naquele exato comando? Exemplo:

        unidadeTrabalhoRepository.save(unidadeTrabalho);

Nesta linha ele persiste o EM, da o comando, da o commit e faz o close/clear/merge/remove?

1 resposta

Olá, Thomas!

Entendo sua dúvida em relação ao uso do FetchMode.EAGER. Realmente, quando utilizamos esse método, todos os relacionamentos da tabela são carregados junto, o que pode ser um problema de performance em alguns casos.

O ideal é utilizar o FetchMode.LAZY, que carrega os relacionamentos apenas quando são acessados, evitando assim o carregamento desnecessário de dados.

Quanto à sua segunda pergunta, o EntityManager é gerenciado pelo Spring e é aberto e fechado automaticamente em cada transação. No exemplo que você citou, o EntityManager é aberto, a unidade de trabalho é salva e, em seguida, o EntityManager é fechado automaticamente pelo Spring.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software