Session no Hibernate, qual a melhor forma de uso?  XML
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Autor Mensagem
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Opa!
Senhores, estou tendo muitos problemas com a famosa LazyInitializationException.

Pelo que vi, uma forma de contornar esse erro é sempre manter a Session aberta. OK. Funciona, mas qual a melhor forma de fazer isso?

Pensei no seguinte:
Assim que o usuário se logar, jogo o objeto Session na sessão http dele e sempre pego de lá.

Existe algum problema com isso? Corro o risco de alguém pegar o objeto Session errado?

Outra alternativa seria sempre chamar o método HibernateUtil.getSession() e nunca fechá-lo.
No caso dessa alternativa, posso ter problemas de memória? Ou o Hibernate mata a Session que ficou aberta e está sem uso?

Toda ajuda é bem vinda

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
Giulliano
GUJ Master
[Avatar]

Membro desde: 14/11/2006 19:29:38
Mensagens: 1627
Localização: São Paulo
Offline

eu não vou te ajudar muito mas só pra dar uma luz....

num curso q fiz na caelum lembro do instrutor explicar uma classe que servia como filtro de servlets....

ou seja toda vez que sua app fizesse uma requição ela passaria por esse filtro....e lá nesse filtro vc criaria sua session...

lembro q para criar tinha que implementar alguma coisa....

desculpe a falta de informação mas não lembro muito bem

Oracle Certified Master, Java EE 5 Enterprise Architect
Oracle Certified Professional Java Programmer
GiuLLianO MoRRoNi




<UnTouChAbLe>
[Email] [WWW] [MSN]
Eduardo Bregaida
Moderador
[Avatar]
Membro desde: 13/11/2003 14:11:35
Mensagens: 2416
Localização: São Caetano do Sul - SP
Offline

Giulliano wrote:eu não vou te ajudar muito mas só pra dar uma luz....

num curso q fiz na caelum lembro do instrutor explicar uma classe que servia como filtro de servlets....

ou seja toda vez que sua app fizesse uma requição ela passaria por esse filtro....e lá nesse filtro vc criaria sua session...

lembro q para criar tinha que implementar alguma coisa....

desculpe a falta de informação mas não lembro muito bem


Tenho 1 exemplo desse filtro aki no Blog:
http://javawora.blogspot.com/2007/06/tutorial-parte-1.html :D

Blog - Java Anywhere
@bregaida - Twitter
Flickr - Fotos
Cursos de Java?

"Você poderia me dizer, por favor, qual caminho eu devo seguir?"
"Isto depende muito de onde você deseja chegar."
-Lewis Carroll, Alice no País das Maravilhas
[Email] [WWW] [MSN]
marcelo_mococa
Virtual Machine Man
[Avatar]

Membro desde: 03/03/2005 10:03:32
Mensagens: 622
Localização: São Paulo
Offline

pesquise sobre OpenSessionInView.

Marcelo Madeira - TCS
SCJP 1.5
SCWCD 1.4
blog

cleriston
JavaGuru
[Avatar]

Membro desde: 06/02/2007 10:54:37
Mensagens: 234
Offline

Cara eu apanhei muito com isso já....
É o seguinte, veja o código abaixo :


depois da ultima linha você nao consegue mesmo "mexer" com o meuObjeto.
Para isso no mapeamento do MeuObjeto você tem que fazer


com o "lazy="false"" você pode "mexer" com o objeto depois q a sessao foi fechada...
Na realidade quando o "lazy="true"" ele só "traz" a informação do banco para seu objeto quando você precisa. (Obs.: Lazy=preguiçoso, ou seja, só traz qdo realmente precisar). Como sua session estava fechada, ele nao conseguia mais ir lah no banco e falar : "me dá o objeto que estou precisando agora"
Você colocando "lazy="false"" no momento q vc dá um load, ele fala pro banco "me dá o objeto q eu vou ficar com ele mesmo depois q cair a minha ligação com você"
Conseguiu entender?? Td ok?
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Senhores, aparentemente o OpenSessionInView resolve meus problemas, vou implementar ele aqui

Cleriston, entendi o que você disse, mas não posso deixar como lazy="false". O sistema é muito grande, com muitos relacionamentos e com muitos acessos simultâneos, isso iria deixá-lo muito lento.

Assim que implementar o esquema do OpenSessionInView coloco aqui se ficou tudo certo

Obrigado pela ajuda.

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
andre_a_s
GUJ Ranger
[Avatar]

Membro desde: 23/02/2003 01:04:53
Mensagens: 755
Localização: Santo André(SP)
Offline

Senhores, implementei tudo e aparentemente está tudo funcionando
Mas estou com um problema...

Tenho uma listagem de orcamentos, com um link em cada uma para exclusão, quando mando excluir ele executa o seguinte metodo:

Depois da execução ele cai na mesma página de listagem e o registro excluído não aparece mais na lista.
Antes de implementar o OpenSessionInView, funcionava perfeito, agora não funciona.
Entendo o porque. Ele faz isso porque ele monta a página ANTES de comitar a transação que excluiu o meu objeto. Sendo assim, quando executo o método que popula minha lista de orcamentos, o cara que excluí ainda está lá.

Alguma sugestão de como resolver esse problemas

*Se eu voltar a página com um "back" e depois retornar na pagina de orcamentos a lista está correta, sem o orcamento excluído.

Gosta de cerveja e de viagem?
Visite meu blog!
http://www.TravelAndBeer.com
[Email] [MSN] [ICQ]
PANIC
Entusiasta Java
[Avatar]

Membro desde: 13/08/2007 13:00:22
Mensagens: 20
Offline

saudações,
nao conheço OpenSessionInView porem o seu primeiro problema poderia ter sido resolvido se voce buscasse o objeto fazendo join no relacionamento, ou fazendo o seguinte no mesmo método após o q.list() ou q.uniqueResult:

assim ele nao daria erro de LazyInitializationException.
e a principio o seu método de remoção voltaria a funcionar...

espero ter ajudado
 
Índice dos Fóruns » Ferramentas, Frameworks e Utilitários
Ir para:   
Powered by JForum 2.1.8 © JForum Team