Erro org.hibernate.LazyInitializationException: could not initialize proxy - no Session
08/11/2011 23:34
1
Olá Galera,

por favor me ajudem, Estou com um erro muito sinistro e não consigo me livrar dele, é assim eu estou fazendo um programa no grails só que quando eu clico no link do home ele me aparece esse erro ai: org.hibernate.LazyInitializationException: could not initialize proxy - no Session

Eu utilizo variavel de sessão no main.gsp, só que não posso tirar essas variáveis e o erro é por causa disso, se eu retirar o home funciona.

Por favor alguém me ajuda!!!

Obrigada,

Alécia
Tags: erro, hibernate, no-session


1
Oi Alecia, este é um erro bastante comum.

O que acontece é o seguinte: o GORM, que é a ferramenta de persistência do Grails é baseada no Hibernate. Este é um erro do Hibernate na realidade.

Por default, quando o Hibernate nos retorna um objeto, ele não te retorna o objeto da classe que você quer exatamente, mas sim um proxy. Este proxy é usado para fazer o carregamento lazy das dependências da sua classe, e está diretamente ligado a uma sessão do Hibernate.

Então, supondo que você possua uma classe chamada Livro, com um atributo do tipo Autor, quando você executa um código como o abaixo


println livro.autor


O Hibernate na realidade vai fazer o seguinte:

1. Detectou que vou ter de chamar uma associação
2. Nâo é uma instância de Livro que tenho acesso, mas a um proxy.
3. Se é um proxy, tenho um atributo neste proxy que é a sessão, e é por esta sessão que busco o autor

Como seu objeto está na sessão do usuário, a sessão muito possívelmente já foi fechada ou não existe mais, disparando este erro que você está pegando.

Há algumas soluções para este problema.

1. Mapeie suas associações para que sejam do tipo eager, e não lazy (isto pode ser ruim, pois você pode sem querer baixar um grafo enorme de dependências para a sua memória e só é recomendado para modelos muuuuito simples)

2. Se vai precisar dos atributos/dependencias da sua classe, os chame de cara antes de fechar a sessão, preenchendo assim o seu objeto ou, melhor ainda, não os use fora de uma sessão do Hibernate.


0
Olá Henrique,

Muito obrigada pela resposta esclarecedora, vou tentar e te retorno se obtive sucesso ou não.

Abraços,

Alécia
09/11/2011 17:37



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto