1
resposta

Performance de consultas - LazyInitializationException

Eu tenho uma dúvida em relação do JOIN FETCH. Por exemplo, eu tenho uma entidade chamada DocumentosVO e outra chama PessoaVO

public class PessoaVO {
    private String nomePessoa
    @OneToMany(mappedBy = "pessoaVO", cascade = CascadeType.ALL)
    private List<DocumentoVO> listaDocumentos = new ArrayList<>();

    Getters and Setters
}
public class DocumentoVO {
    private Integer numeroDocumento
    private Integer tipoDocumento
    @ManyToOne(fetch = FetchType.LAZY)
    private PessoaVO pessoaVO;

    Getters and Setters    

}

Se eu executar a consulta:

SELECT d FROM DocumentoVO d JOIN FETCH d.passoaVO WHERE d.numeroDocumento = :numeroDocumento

Está ocorrendo uma LazyInitializationException: failed to lazily initialize a collection of role PessoaVO.listaDocumentos, could not initialize proxy - no Session

Porém, eu estou fazendo uma pesquisa justamente em cima da entidade DocumentoVO.

Alguém poderia ajudar ?

Desde já agradeço.

1 resposta

Oi Felipe,

Você está carregando um documentoVO e fazendo o join fetch com o pessoaVO, mas não com a listaDocumentos que está dentro do PessoaVO e por isso ocorre o lazyInitializationException.

Na verdade eu estou achando "estranho" essa sua consulta, pois parece que você deseja carregar um único documento(na querie está filtrando pelo número do documento, que imagino ser único), mas se vai caregar apenas um único documento, porque precisaria acessar a lista de documentos? Isso que parece não fazer muito sentido.

Talvez você deva alterar a querie para trazer os dados que você deseja de outra forma. Talvez fazendo o select em cima da entidade PessoaVo e não DocumentoVo. Verifique se faz sentido.