could not initialize proxy - no Session  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
adrianostanley
JavaGuru
[Avatar]

Membro desde: 28/06/2006 09:30:23
Mensagens: 243
Localização: Juiz de Fora/MG
Offline

Tenho os seguintes mapeamentos e recebo um org.hibernate.LazyInitializationException: could not initialize proxy - no Session.


Alguém poderia me indicar o que há de errado com esses mapeamentos??

Adriano 'Stanley'
http://www.enigmapremiado.com.br
[MSN]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Não é problema nos mapeamentos....
O problema é que o(s) objeto(s) relacionados ao objeto que está trabalhando (os tais many-to-one) são LAZY, ou seja, só serão carregados quando chamados.

Porém você deve estar transitando seu objeto para fora do container (o contexto persistente), assim perdendo a conexão com o banco para buscar os dados lazy.

Dai ao tentar utilizar qualquer dado/objeto lazy ele dá esse erro pois não é possível carregar os dados requeridos.....

Solução.
1) Utilize Eager (bad)
2) Inicialize os dados que irás utilizar fora do container antes de sair dele.
Como? Faça chamadas aos atributos...
tipo



Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
adrianostanley
JavaGuru
[Avatar]

Membro desde: 28/06/2006 09:30:23
Mensagens: 243
Localização: Juiz de Fora/MG
Offline

Opa, então, nem citei acima, mas pra salvar tá funcionando legal... ele grava os registros normalmente...
É só pra listá-los que está dando isso...
Resumi as ações da busca num método só pra ficar mais fácil mostrar aqui:

Como ficaria aqui por exemplo pra inicializar os dados antes de retorná-los, como proposto na reposta acima??
Desde já muito obrigado!!
Adriano

Adriano 'Stanley'
http://www.enigmapremiado.com.br
[MSN]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Ummm... seu problema é mais simples....

A questão é que vc está fechando a session após consultar.
Porém, existe algum dado da lista que ainda não foi carregado....

Por exemplo:

Você tem uma lista de BeanGame, e cada BeanGame tem um BeanTeam.
Seu BeanTeam é lazy inicialization dentro do BeanGame.

Quanto você fizer algo como.

se o BeanTeam é lazy, no momento da chamada ele vai tentar ir no banco pra carregar os dados do BeanTeam.

Porém como sua sessão foi fechada
[/code]session.close();[/code]
ele não consegue carregar e estoura esta excessão.

Para resolver, ou você torna seu atributo EAGER (fetch="join", veja mais) ou você faz uma chamada ao atributo antes de fechar a sessão.
Ex.

Dai ele vai ser carregado antes de fechar a sessão......

Até.

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
adrianostanley
JavaGuru
[Avatar]

Membro desde: 28/06/2006 09:30:23
Mensagens: 243
Localização: Juiz de Fora/MG
Offline

Então cara... pelo que li faz sentido e entendi a possível causa.
Mas chamei as duas propriedades que são mapeadas como many to one e continuou dando exatamente o mesmo erro.

A exceção é disparada no momento que o objeto é usado pela primeira vez.
Achei estranho, não deveria gerar um NullPointerException?

Adriano 'Stanley'
http://www.enigmapremiado.com.br
[MSN]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline


Isso precisa ser feito antes de fechar a sessão......

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
adrianostanley
JavaGuru
[Avatar]

Membro desde: 28/06/2006 09:30:23
Mensagens: 243
Localização: Juiz de Fora/MG
Offline

Vou colocar aqui também os scripts de criação das duas tabelas...
Às vezes é aí que está o erro...


Muito obrigado pela paciência...

Adriano 'Stanley'
http://www.enigmapremiado.com.br
[MSN]
nbluis
GUJ Master
[Avatar]

Membro desde: 27/05/2006 01:31:51
Mensagens: 1531
Localização: Porto Alegre - RS
Offline

Isso precisa ser feito antes de fechar a sessão......
Chame algum método do beanname....

assim....

Luis Eduardo Bohrer

Any fool can write code that a computer can understand. Good programmers write code that humans can understand.
[WWW]
adrianostanley
JavaGuru
[Avatar]

Membro desde: 28/06/2006 09:30:23
Mensagens: 243
Localização: Juiz de Fora/MG
Offline

Então, hehe, a exceção agora já não é mais no proxy, session, etc...
Gera uma NullPointer... debuguei e vi que os objetos de BeanTeam estão nulos no BeanGame.
Pelo menos não é o mesmo erro.
Muito obrigado pela ajuda!!

Adriano 'Stanley'
http://www.enigmapremiado.com.br
[MSN]
aureliolima
JavaChild
[Avatar]

Membro desde: 04/03/2009 15:02:02
Mensagens: 100
Offline

tb tava tendo o mesmo erro que vc...

mas no meu caso era pra acessar um atributo de uma classe herdada, porém resolvi o problema apenas setando o lazy=true, no mapeamento da classe herdada.

Atenciosamente.

Aurélio Camara Lima

Desenvolvimento de Sistemas Web
Passo Fundo / RS
Página Pessoal: www.aitecinfo.com.br
[Email] [MSN]
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team