1
resposta

Porque mesmo após o close, temos retorno de valor no teste de Pedido??

eu revi a aula mas ainda nao consigo entender. Bom, se está lazy e der o close pode gerar problema, pq ira gerar problema se não esta mais consultando a query mas pegando o resultado? e pq devemos controlar o lazy devido aos casos de close? isso nao fez muito sentido para mim, é como se mesmo fechado ele ainda pudesse consultar o banco. se alguém puder me explicar, agradeço

1 resposta

Resumindo:

  • Tudo que NÃO está lazy, pode ser acessado após o close.
  • Tudo que ESTÁ lazy, não pode ser acessado após o close, pois não foi recuperado pelo entityManager.

Explicação:

  • Ao chamar a consulta, o EntityManager irá gerar o código de sql para recuperar tudo que está mapeado na Entidade em questão (Pedido)

  • Todos os campos que estiverem marcados como Eager nesta Entidade farão o código SQL conter dados para recuperar essas entidades inteiras.

  • Todos os campos que estiverem marcados como Lazy na Entidade farão o código SQL ignorarem o relacionamento.

  • Então ao executar a consulta e salvar o resultado num objeto Pedido, por exemplo, todos os relacionamentos Eager já foram recuperados e colocados lá na variável, já os Lazy não foram. Se você fechar o entityManager e tentar recuperar dados Eager, vai dar certo, mas se tentar pegar os Lazy vai dar erro, pois eles não estão lá na variável, apenas o entityManager é capaz de recuperar esses dados, mas ele já foi fechado.