Como funciona a aplicação deste pattern com hibernate? Fiquei na dúvida depois de ler isso. Dá pra substituir DAO por Active Record pattern?
DAO com Hibernate
6 Respostas
Não tenho a resposta para a segunda pergunta. Quanto a primeira, o GUJ2 implementa DAOs usando o Hibernate. Já deu uma olhada no código?
[]'s
Sim, já ví a implementação de DAO do GUJ2, é bem simples.
Pelo que entendí no link que passei, vc cria uma dependência de sua aplicação com o hibernate. Ou seja, vc tem que fazer tudo novamente se resolver mudar seu sistema de persistência.
Mas a minha dúvida mesmo é: Modelando uma classe Root que tenha os metodos básicos do hibernate (ex: save(obj), saveOrUpdate(obj), delete(obj), etc.) é possível extender essa classe e utilizar estes métodos na classe filha sem override?
Sim, já ví a implementação de DAO do GUJ2, é bem simples.
Pelo que entendí no link que passei, vc cria uma dependência de sua aplicação com o hibernate. Ou seja, vc tem que fazer tudo novamente se resolver mudar seu sistema de persistência.
Nao me sinto totalmente convencido com esse argumento. Vejamos: usa-se uma camada de persistencia para (pelo menos) abstrair o SGBD (ou outra fonte de dados, va la). Mudar de SGBD nao eh coisa rotineira - mas tudo bem, manter a independencia eh legal (alem disso em geral um ferramenta de mapeamento O/R traz outras vantagens).
Sera que abstrair a ferramenta de persistencia nao eh muito preciosismo? Claro, se o projeto ja contempla a utilizacao do pattern DAO, beleza. Agora, colocar mais uma camada soh para esconder o Hibernate? Nao sei nao…
Gostaria de conhecer a opiniao de outras pessoas a respeito disso. Alguem?
Sim. 
Marcio Kuchma
Ué? Por que não? Mudar de camada de persistência é algo que pode acontecer bem facilmente. DAOs já quebram um galhão para fazer esta abstração. Misturar DAO com Template Method fica mais lindo ainda.
E por que sim? Cade os argumentos? 
Acho que nao eh bem o nosso caso, mas: http://c2.com/cgi/wiki?YouArentGonnaNeedIt
Ja conheco os argumentos do Core J2EE Patterns e o que normalmente lemos por ai - mas ainda nao vi na pratica. Entao ai vai: alguem ja utilizou uma camada DAO APENAS para abstrair o Hibernate e depois por algum motivo precisou dar manutencao no negocio tendo entao concluido que foi uma boa ideia ter feito isso?
Veja, nao sou contra fazer isso. Eh relativamente tranquilo implementar a ideia. Mas nao estou totalmente convencido da utilidade.
Marcio Kuchma
Depois de postar fiquei pensando e lembrei de pelo menos um caso onde seria legal ter uma camada “protegendo” o Hibernate: controle de transações. Seria uma espécie de camada de “serviço” ou similar.
Marcio Kuchma