Sobes.tech
Junior — Middle

De que formas é que se pode resolver o erro LazyInitializationException no Hibernate?

sobes.tech IA

Resposta da IA

O erro LazyInitializationException no Hibernate ocorre quando se tenta aceder a uma coleção ou objeto carregado de forma preguiçosa fora da sessão Hibernate.

Formas de resolução:

  1. Inicializar os dados dentro da sessão — carregar os dados necessários antes de fechar a sessão, por exemplo, chamar Hibernate.initialize() ou aceder à coleção.

  2. Usar FetchType.EAGER — alterar a estratégia de carregamento para carregamento ansioso, para que os dados sejam carregados imediatamente (mas isto pode afetar o desempenho).

  3. Abrir a sessão durante a operação com os objetos (Open Session in View) — em aplicações web, pode-se manter a sessão aberta até ao renderizar da vista.

  4. Usar consultas com join fetch — carregar explicitamente as entidades relacionadas através de HQL ou Criteria API.

Exemplo com join fetch:

String hql = "FROM User u JOIN FETCH u.roles WHERE u.id = :id";
User user = session.createQuery(hql, User.class)
                   .setParameter("id", userId)
                   .uniqueResult();

Desta forma, os dados relacionados serão carregados juntamente com o objeto principal, e o erro não ocorrerá.