Tratamento de Sessões manualmente

Estou com um erro conforme descrito no tópico:

Mas para não disvirtuar o assunto daquele vou perguntar em um novo:

Tenho como fazer esse tratamento de sessões manualmente? Na maneira como descrevi no outro tópico para salvar, excluir e consultar estão ficando todas sessões abertas: nenhuma está sendo fechada…

Para salvar e excluir fiz assim:

this.session.saveOrUpdate(cliente); this.session.flush(); tx.commit(); this.session.close();

Mas, para consultar estou tendo erro: failed to lazily initialize a collection of role

this.session = HibernateUtil.getSessionFactory(id).openSession(); List<Cliente> lista = this.session.createQuery(sql).list(); this.session.close(); return lista;

Outro detalhe, nesse meu caso abro uma sessão para cada operação.E na documentação do Hibernate tem o seguinte:

“A single Session and a single database transaction implement the processing of a particular request event (for example, a Http request in a web application). Do never use the session-per-operation anti-pattern!”

Essa maneira que estou fazendo então não seria a maneira mais correta.No outro tópico já me foi sugerido o Open Session in View, porém ainda não compreendi direito. (eu posso fazer manualmente?)

Ainda não entendi direito o funcionamento da sessão… como ela é a reaproveitada, entre outras coisas

No caso, esse Open Session in View seria uma maneira de centralizar essas criações das sessões de modo a não duplicar sessões, e sempre garantir que terá uma disponível?

Não vai funcionar esse padrão, pois usa um filtro da servlet e tenho bancos de dados diferentes que são configurados em runtime( não sei esse valor na inicialização da servlet, apenas quando o usuário vai fazer o login ).

Tenho que partir para outra:

  • Onde é o local mais correto para se fechar as sessões após consultas? E como fazê-los - devo centralizar isso no HibernateUtil?