Olá
estou começando com JPA e tenho uma dúvida que acredito que seja simples.
Tenho a seguinte relação:
Funcionário <-> (many to one) <-> Pessoa <-> (one to one) <-> Documentos
Ou seja, uma pessoa tem apenas um conjunto de documentos e pode ter vários registros de funcionário.
Minha tela mostra o nome (Pessoa) e a data de admissão (Funcionário). Consegui reverter o problema N+1 usando o JOIN FETCH em minha query. Antes de eu adicionar a entidade documentos, a tela carregava rapidamente. Porém, depois que adicionei essa entidade o carregamento ficou super lento, pelo console, consigo ver que está sendo executada a query sobre a tabela de documentos inúmeras vezes. Me parece que o problema do N+1 voltou a ocorrer. Achei estranho, pois em momento nenhum uso propriedades da tabela de documentos em minha tela.
O fato de usar o JOIN FETCH de Funcionário para Pessoa, faz com que o container busque por todas as tabelas relacionadas a Pessoa? Mesmo que eu tenha declarado a relação como LAZY?
Abs!
O join fetch na consulta anula o LAZY da anotação.
É isso?
Mais ou menos, rs.
O problema é que, aparentemente, ele está anulando o LAZY da relação Funcionário->Pessoa, e também o LAZY da relação Pessoa->Documentos. Sendo que essa última anulação não é necessária para mim, pois nesse momento não uso nenhuma propriedade de Documentos.
Tem como evitar esse “cascading” de anulação de LAZY?
[quote=felipe_gdr]Mais ou menos, rs.
O problema é que, aparentemente, ele está anulando o LAZY da relação Funcionário->Pessoa, e também o LAZY da relação Pessoa->Documentos. Sendo que essa última anulação não é necessária para mim, pois nesse momento não uso nenhuma propriedade de Documentos.
Tem como evitar esse “cascading” de anulação de LAZY?[/quote]Eu vejo que para fazer isso, você teria que realizar a consulta não por Funcionário, mas talvez por Pessoa/Documentos.
Certo,
o problema aí é que a entidade Funcionario tem relação com mais centenas de outras tabelas, se eu começasse a consulta de Pessoa para Funcionário, teria esse mesmo problema, só que bem maior.