Bom dia.
Utilizo Spring e Hibernate na minha aplicação (JPA e Annotations).
O DAO é criado usando injeção de:
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean
com:
adapter org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter
E o AbstractDAO possui a annotation @Transactional
Até aí tudo funcionando redondeenho (k k k k k k)
O pObReMa é: sempre em classes de negócios quando o sistema tenta (via reflexão ou o que quer que seja) acessar um campo anotado com fetch=FetchType.LAZY, ocorre a famosa LazyInitializationException (there is no session or the session was closed).
Já que o Spring gerencia a sessão de base de dados (o DAO não abre a conexão manualmente, o entityManager é utilizado e o Spring se encarrega de abrir / fechar sessão e gerenciar a transação)…
COMO fazer com que o acesso a um getter anotado com lazy load tenha um acesso automático correto a uma sessão válida de conexão com o banco de dados?
Afinal, não faz sentido sequer que exista lazy load se eu sou forçado a acessar o campo quando a conexão ainda está aberta no DAO, perdendo essa funcionalidade em outros momentos onde o sistema precisa acessar esses dados… Seria mais claro eu usar uma query (HQL que seja…) com o bom e velho join, se o lazy não é tão lazy assim uma vez que deve ser acessado no momento do select…
So… may anyone help me? Thanks!!!
