Join Fetch carrega todas as entidades One-to-One?

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.