Junior — Middle
Consegues descrever um problema relacionado com o carregamento preguiçoso de sessões no JPA?
sobes.tech IA
Resposta da IA
O problema do carregamento preguiçoso (lazy loading) de sessões no JPA está relacionado com o facto de as entidades relacionadas serem carregadas a partir do banco de dados apenas na primeira vez que são acedidas, e não imediatamente ao carregar a entidade principal. Se a sessão (EntityManager) for fechada antes de se aceder aos dados carregados de forma preguiçosa, ao tentar aceder a eles ocorre uma exceção LazyInitializationException.
Por exemplo, se tiver uma entidade Order com uma coleção preguiçosa items, e carregar o pedido numa função, e depois fechar a sessão, ao tentar obter order.getItems() fora da sessão, obterá um erro.
Para evitar este problema, pode:
- Utilizar carregamento ansioso (EAGER), se for justificado.
- Abrir a sessão durante o tempo de trabalho com os objetos (Open Session in View).
- Inicializar explicitamente as coleções preguiçosas dentro da sessão, por exemplo, chamando
Hibernate.initialize().
Exemplo:
Order order = entityManager.find(Order.class, id);
Hibernate.initialize(order.getItems()); // inicialização dentro da sessão
entityManager.close();
// Agora pode aceder com segurança a order.getItems()