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

entityManager.find não funciona com Lazy Loading no WildFly

Olá! Tudo bem?

Este tópico já estava aberto em https://cursos.alura.com.br/forum/topico-tempo-de-duracao-de-uma-transacao-no-wildfly-128154#872647

Mas coloquei-o aqui novamente, com algumas mudanças, pra facilitar a identificação.

Fiz a seguinte alteração no projeto do curso:

Na classe AgendamentoEmail, acrescentei um atributo de uma entidade de teste que criei e o anotei com Lazy Loading, da seguinte forma:

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "entidade_teste_id")
private EntidadeTeste entidadeTeste;

No DAO, acrescentei um método getPorId, da seguinte forma:

    public AgendamentoEmail getPorId(Long id) {
        AgendamentoEmail agendamentoEmail = entityManager.find(AgendamentoEmail.class, id);
        System.out.println("Descrição da entidade teste: " + agendamentoEmail.getEntidadeTeste().getDescricao());
        return agendamentoEmail; 
    }

Perceba que estou utilizando o mesmo código do projeto, e que em teoria eu deveria estar na mesma transação, e por isso o código acima deveria executar normalmente, sem erros (levando-se em consideração que existe o campo com o ID referenciado).

Porém, ao executar esse método, o seguinte erro aparece:

Caused by: org.hibernate.TransientObjectException: Proxy [br.com.alura.entidade.EntidadeTeste#1] is detached (i.e, session is null). The read-only/modifiable setting is only accessible when the proxy is associated with an open session.

E o curioso é que esse código funciona normalmente em um projeto Hibernate com CDI e rodando no Tomcat.

Gostaria de saber mais sobre esse comportamento, e como eu posso fazer para aproveitar o benefício de o Hibernate recuperar campos anotados como Lazy enquanto ainda estiver na mesma transação (sem anotar o atributo como eager, e sem acrescentar um join fetch pra ele trazer tudo de uma vez).

Em outras palavras, se funciona normalmente no tomcat, como eu poderia fazer para funcionar também no wildfly?

Garanta sua matrícula hoje e ganhe + 2 meses grátis

Continue sua jornada tech com ainda mais tempo para aprender e evoluir

Quero aproveitar agora
1 resposta
solução!

Consegui resolver configurando o infinispan no persistence.xml. Mas ainda restam dúvidas, principalmente no que diz respeito ao que causou o problema e ao aperfeiçoamento da solução.

Vou continuar no tópico inicialmente criado, para que as informações fiquem mais centralizadas.

Apenas para facilitar, segue o link: https://cursos.alura.com.br/forum/topico-tempo-de-duracao-de-uma-transacao-no-wildfly-128154