Hibernate 3 -- org.hibernate.LazyInitializationException: could not initialize proxy - the owning Se  XML
Índice dos Fóruns » Desenvolvimento Web
Autor Mensagem
smorigo
Java Ninja
[Avatar]

Membro desde: 20/05/2004 07:49:08
Mensagens: 250
Offline

Bom dia pessoal estou começando a usar Hibernate 3 e estou recebendo está mensagem:



Pelo que eu entendi ele está reclamando do meu getRazaoSocial() já olhei tudo e não encontrei nada de anormal... isso é alguma configuração ?


valeu.....

This message was edited 1 time. Last update was at 23/04/2005 09:15:22

leomc
JavaGuru
[Avatar]

Membro desde: 16/02/2004 21:39:45
Mensagens: 216
Localização: Brasília - DF
Offline

Este erro acontece quando vc tenta dar um get em um atributo que está lazy="true" no hbm e a sessao do hibernate já está fechada. Existem várias formas de contornar isso, fala mais da sua arquitetura pra ter como dar uma dica pra vc...

[]'s Léo

Melhores Destinos - passagens aereas profissionais
http://www.leonardomarques.net
[WWW]
smorigo
Java Ninja
[Avatar]

Membro desde: 20/05/2004 07:49:08
Mensagens: 250
Offline

Olha só a arquitetura é a seguinte:

1) Criei um formBean no meu struts-config.xml



2) Criei JavaBean


3) Criei um DAO


4) Meu mapeamento está dessa maneira:



Bem fora isso tenho uma classe de ConnectionFactory e o arquivo de configuração da conexão com meu BD que é Firebird...


valeuuuu
hmichel
Virtual Machine Man
[Avatar]

Membro desde: 03/11/2002 16:54:53
Mensagens: 611
Localização: Morro da Fumaça - SC
Offline

leomc wrote:Existem várias formas de contornar ...
Quais por exemplo?

[]'s

This message was edited 1 time. Last update was at 23/04/2005 13:27:19



Michel Graciano
[WWW] [MSN]
smorigo
Java Ninja
[Avatar]

Membro desde: 20/05/2004 07:49:08
Mensagens: 250
Offline

Bom estive lendo um pouco não consegui achar a solução mais acredito que o erro deva estar no meu ConnectionFactory

This message was edited 1 time. Last update was at 23/04/2005 17:10:23

smorigo
Java Ninja
[Avatar]

Membro desde: 20/05/2004 07:49:08
Mensagens: 250
Offline

deixei a sessão aberta e ele funciono... alguém tem alguma dica de como solucionar o problema??? estou ficando doidooo rsss
Alexandre Possebom
Thread.start()

Membro desde: 03/04/2006 08:06:08
Mensagens: 32
Offline

Mude de :


para :
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Gente, desculpa desenterrar esse post, mas estava tendo o mesmo problema, de Lazy Initialization Exception.

Troquei o load pelo get como sugerido pelo amigo Alexandre Possebom e funcionou, mas gostaria de entender o porque. Qual a diferença entre eles?


Obrigado desde já
[Email] [MSN]
Deh
JavaGuru
[Avatar]

Membro desde: 18/04/2006 23:02:24
Mensagens: 244
Localização: Florianópolis - SC
Offline

Basicamente load retorna uma proxy, e get retorna o objeto.

Como a Session do cara tinha side fechada, e ele pegava uma LazyInitializationException quando tentava usar o proxy do objeto.
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Olha o meu caso:




to usando o vRaptor e hibernate. Sempre faço uma solicitação para um logic. Tenho somente uma página, que tem um corpo onde faz várias requisições AJAX. Na primeira requisição AJAX, depois de abrir a página inicial, ocorre tudo sem problemas, ja na segunda, ocorre a excessão. Todas as páginas requisitadas utilizam o acesso ao banco. Passam por um interceptor q cria uma sessão e no final a fecha. Qual pode ser o problema? E porque com o get não ocorre?

É melhor usar o get do que o load ou o contrário? Ou tanto faz em questão de desempenho?

Valew
[Email] [MSN]
Deh
JavaGuru
[Avatar]

Membro desde: 18/04/2006 23:02:24
Mensagens: 244
Localização: Florianópolis - SC
Offline

Quanto ao desempenho o load é melhor pois só vai puxar os dados na hora que você usa-los, ele retorna uma proxy.

leia isso para entender melhor sobre o desempenho: http://www.hibernate.org/hib_docs/reference/en/html/performance.html

Quanto ao seu problema, com o get ele retorna o objeto na hora que você chama o get. Com o load, ele retorna uma proxy, e como não tem sessão o hibernate não consegue inicializar o Objeto e logo lança a excessão.

Links que lhe vão ser úteis:

Sobre Sessions: http://www.hibernate.org/42.html
Sobre OpenSessionInView: http://www.hibernate.org/43.html
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Então cara,

No meu Interceptor eu crio uma instância de um DaoFactory:



e no construtor do DaoFactory cria uma Session





Então não entendi porque está me acusando que não tenho uma sessão.

Desculpa ficar incomodando, mas essa dúvida ta me tirando horas de sono ha dias...


Valew
[Email] [MSN]
Deh
JavaGuru
[Avatar]

Membro desde: 18/04/2006 23:02:24
Mensagens: 244
Localização: Florianópolis - SC
Offline

Olhando por cima parece estar tudo certo(mas ta tarde já, então não tenho 100% de certeza)... tem certeza que não tem algo fechando a conexão antes de usares o objeto carregado com o proxy?
Tenta chamar session.isOpen() pra ver se a sessão ainda está aberta quando fores utilizar o objeto carregado pelo .load

Também tem o Hibernate.initializate(Object obj) pra forçar a inicialização da proxy.

ninguem eh de ferro.. também to com sono aqui hahaha

Boa noite
paulohrl
Virtual Machine Man

Membro desde: 12/01/2007 23:35:34
Mensagens: 611
Offline

Vou por o isOpen para ver se ainda está aberta...

Valew


Depois posto o resultado.

Espero que positivo.
[Email] [MSN]
 
Índice dos Fóruns » Desenvolvimento Web
Ir para:   
Powered by JForum 2.1.8 © JForum Team