| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/03/2010 08:33:03
|
furacao123
GUJ Ranger
![[Avatar]](/images/avatar/f2dc8351dbd57c759aebf55e53876289.jpg)
Membro desde: 24/01/2008 22:05:47
Mensagens: 794
Offline
|
Aew Galera blz
Estou desenvolvendo uma aplicação Desktop usando Hibernate e estou enfrentando problemas com a minha classe GenericDAO para gerenciar as sessões, sempre usei na web e nunca tive problemas pois fazia um filtro que controlava a sessão.
Vou postar o código da minha classe Util e o Generic DAO para analisar e me ajudarem.
Classe HibernateUtil
Meu GenericDAO
e aqui o meu DAO comum
e aqui meu bean com as anotações do relacionamento
Se eu tiro a linha onde fecha a sessao eu consigo trabalhar normalmente dessa forma, mas isso é recomendado? qual a melhor maneira para gerenciar essas sessões e trabalhar com LAZY??
se eu nao tiro essa linha onde fecha a sessão eu sou obrigado a usar o Fetch como EAGER e apenas um OnToMany no bean pois se nao da erro de multiple bags.
Como resolvo esse problema desktop?
Obrigado.
|
Q8200 | Intel DG35EC | 4GB Kingston 800 |HD Seagate 250 GB SATA | HD Seagate 160 GB SATA | Monitor LG 22'' | Fonte AKASA 350W | GeForce 9600 GT
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/03/2010 08:52:42
|
Jair Rillo Junior
Moderador
![[Avatar]](/images/avatar/31b3b31a1c2f8a370206f111127c0dbd.jpg)
Membro desde: 29/04/2003 21:19:53
Mensagens: 2524
Localização: São Paulo / Campinas
Offline
|
Como você mesmo disse, se você fechar a Sessão o LAZY não vai funcionar, isso é o comportamento normal, pois o LAZY nada mais é que um PROXY que quando é executado ele busca as informações "reais" no banco de dados, e para isso o objeto tem que estar gerenciado (e session aberta).
Existem algumas maneiras de resolver isso, vai depender do que se encaixar melhor para voce
- Manter o objeto gerenciado e só fechar a session quando você parar de trabalhar com ele
- Depois que carregar o objeto, carrega também as Collection necessárias (Hibernate.initialize()) antes de fechar a session
- Utiliza um objeto TO (Transfer Object), para copiar os dados do objeto gerenciado para esse objeto.
A princípio eu penso nessas 3 opções. Na maioria dos casos, eu creio que a opção 2 é a mais adequada.
Espero ter ajudado
|
Jair Rillo Junior
http://www.jairrillo.com/blog | Twitter | SCJA, SCJP, SCWCD, SCBCD, IBM SOA Associate |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 19/03/2010 13:29:28
|
furacao123
GUJ Ranger
![[Avatar]](/images/avatar/f2dc8351dbd57c759aebf55e53876289.jpg)
Membro desde: 24/01/2008 22:05:47
Mensagens: 794
Offline
|
mas no esquema que eu fiz de não fechar a session, vou enfrentar algum problema? pois na minha classe HibernateUtil faço a verificação se a session ja existe, no caso a session ficara aberta até o fechamento do programa, acontece algum problema de acesso ao banco?
|
Q8200 | Intel DG35EC | 4GB Kingston 800 |HD Seagate 250 GB SATA | HD Seagate 160 GB SATA | Monitor LG 22'' | Fonte AKASA 350W | GeForce 9600 GT
|
|
|
 |
|
|
|
|