Quando chamar o closeSession do Hibernate usando LAZY?

Pessoal, estou chamando o comando a partir de um interceptor do Struts 2 e estou enfrentando problemas.

O que acontece, é que estou guardando um usuário na sessão, e quando eu tento recuperar alguma lista ou objeto desse usuário, é levantado uma exceção informando que a sessão já foi fechada.

Eu entendo que realmente a sessão foi fechada, pois na primeira vez que entrei neste tela, o usuário foi consultado no banco e gravado na sessão; e após a tela terminar de processar a sessão foi fechada.

Neste caso, alguém tem uma idéia de como resolver esse problema? Eu pensei em três soluções mas não sei se são boas:

  1. Gravar apenas o ID do usuário ao invés do proprío e fazer a consulta sempre que chamar alguma funcionalidade.

  2. Utilizar EAGER ao invés de LAZY, mas pode ser muito custoso ao banco.

  3. Utilizar Spring. Parece ser a melhor solução, mas estou sem tempo pra estudar Spring, portanto se tiver uma alternativa é melhor.

Leia no wiki do hibernate sobre o pattern OpenSessionInView.

http://www.hibernate.org/43.html

Dá uma lida nesse tópico: http://www.guj.com.br/posts/list/57590.java

Talvez ajude…