Diálogo entre o pessoal de Desenvolvimento.

Sr. : Entao, neste projeto utilizaremos Hibernate?
Jr. : É mesmo? Ja ouvi falar, mas é bom mesmo? Me parece que voce não precisa mais fazer Query? Parece meio utópico isso ein.
Sr. : É bem interessante. Com o lance do mapeamente O/R da para ter uma produtividade muito grande. Facilita muito. Faz o seguinte, da uma olhada no tutorial do guj http://www.guj.com.br/java.tutorial.artigo.174.1.guj que da para você entender bem.
Jr. : Beleza, mas como funciona esse mapeamento? É com XML?
Sr. : Isso, da uma olhada no tutorial que vc vai entender bem.
// Alguns Exemplos, POJO e Hbm depois
Jr. : Estou tendo um problema que é o seguinte. Tem um tal de Lazy Loading que nao ta dando certo. Quando eu quero acessar um objeto de dentro de outro objeto ta dando pau. Parece que a sessao esta fechada.
Sr. : O lance é conceitual. Aqui no seu DAO, voce esta fazendo o seguinte. Pegar o session, executar a query e fechar o session. Quando o JSP for ser renderizado é neste momento que sera feito o acesso aos atributos Lazy (Lazy que dizer preguiçoso, ou seja, so sera feito a busca deste objeto quando for necessário). O que acontece é que você não pode fechar a sessão.
Jr. : Mas dai vou deixar a sessao aberta?
Sr. : Negativo. O que vc vai fazer é abrir e fechar em outro momento. Utilizando um filtro para esse controle é uma boa. Da uma olhada nesse link http://www.hibernate.org/43.html
Jr. : Mas utilizar um filtro? Nao vou estar misturando as camadas (Hibernate na view)?
Sr. : Da forma como esta implementada o artigo não. Da uma olhada no artigo.
//Depois de implementado o Filter
Jr. : Poxa, mas nao ta salvando. Que #?*&% esse Hibernate.
Sr. : Calma. Voce lembra do artigo? Para operações de insert/update/remove voce tem que abrir uma transação. Senão nao rola.
Jr. : Ah tá. Beleza.
//Transação com begin no filtro e comit no filtro também.
Jr. : Poxa, ta dando um outro erro. Se da problema no Servlet o filtro nao esta retornando para a tela de retorno do servlet. Poxa, estragou tudo. Preciso arrumar uma forma de passar a pagina de retorno do Servlet para o filtro para ele poder fazer o dispatcher disso. Como vou fazer? $%¨&# Hibernate.
Sr. : Calma. O lance é conceitual de novo. Você não pode abrir uma transação no filtro, pois o Hibernate só da flush das querys no commit. Assim o seu servlet ‘pensa’ que esta tudo ok, porém quando for feito o commit, la no filtro, vai dar pau. A parte de transação é uma funcionalidade de Negocio, portanto deve ser feita na camada de negócio. Da uma olhada em outro tutorial do guj.http://www.guj.com.br/java.tutorial.artigo.182.1.guj
//Transacao com Hibernate implementada.
Jr. : Nooooooooooosa. Show de bola ein. Poxa, sem comentarios, quando for um metodo transacional é só colocar o Annotation la. Elegancia.
Sr. : Pois é. Este é so o começo. Depois você da uma estudada em ferramentas de mapeamento, para gerar os HBM de acordo com suas tabelas, também tem toda a parte de cache, muito legal,porém o tipo de aplicação é influenciada diretamente nisso, também tem a parte da utilização do DataSource do Servidor, mapeamento de coleções, mapeamentos avançados como timestamp, version, herança, etc. Mas entendendo esses conceitos principais de mapeamento, session e transação, o resto é só correr atras.

Esse diálogo representa os pontos importantes da utilização do framework Hibernate. O caminho é meio arduo porém como tem mais carga conceitual do que decoração de API. Boa Sorte