Ola pessoal nao estou aqui simplesmente para criar polêmica não, o fato eh que estou achando o hibernate um verdadeiro elefante branco pelo fato de alguns bugs e “gatos” que é necessário fazer no código como por exemplo não se pode colocar not null para foreignkey que serão atualizadas por cascade pois o hibernate quando vai atualizar os dados ele primeiro da um update para null. Outro problema é quando ele vai atualizar em cascata e dá um erro ele não volta os ids para nulo , tem q ser veito na “unha”. Esses são apenas uns dos vários problemas q encontrei com o hibernate sem contar a “parafernalha” de configurações, por isso estou aqui para saber a opinião de vcs, pois estou pensando em passar tudo para JDBC com DAO onde terei um maior controle. E ai o q vcs acham?
Elefante Branco == Hibernate ==?
9 Respostas
Quem dera eu tivesse o tempo de converter toda a camada de persistência escrita para as minhas entidades usando JDBC, sem a intervenção de um framework de ORM.
Mas não digo isso por causa do Hibernate. Encontrei os mesmos “problemas” que você mencionou, mas é um bom framework, e matura numa frequência que nos permite prever a “correção” dessas inconveniências com o tempo.
Gostaria de migrar para JDBC “puro”, justamente para ter maior controle sobre a camada de persistência, sem a intervenção do hibernate. Mas eu não o faço porque jamais seria tão produtivo quanto sou agora; Inserir annotations nos pojos e gerar o banco, putz, era tudo o que eu queria
(méritos para a API de Persistência EJB3 =)
Olha, quando eu vi o Hibernate a primeira vez achei o máximo. Mas quanto mais versões são lançadas mais a coisa fica complicada. Eu suei para fazer um campo clob do oracle ser mapeado. Coisa que com SQL seria Baba. Eu ainda acho que a melhor opção é criar um dicionário de dados, e criar as queries de foram dinãmica. Sendo que quando você altera a tabela, também altere o dicionário. Fica em um esquema parecido com o Hibernate. Mas quem tem o controle é você.
. É claro que os exemplos que a gente encontra na net, são fracos. E desenvolver algo em cima deles complica quando a coisa fica maior. O bom mesmo é comprar um livro e estudar a fundo… e em um projeto grande, ter uma pessoa só para fazer mapeamentos, e revisar o HSQL. 
bom para mim foi diferente: o hibernate facilitou e muito a minha vida (nossa parece infomercial), mas pq eu nao:
-faço os schemas na mao (hbm2ddl para isso);
-preciso fazer alteracoes direto no banco;
-nao utilizo objetos se a transacao falha (ou seja, nao preciso setar o id para null)
mas… cada um cada um…
Só pra constar, gosto muito do hibernate, uso todos os dias no trabalho e nas minhas pequenas aplicacões. Mas reconheco que ele tem algumas “fraquezas”, que incomodam um pouquinho. Mas nada que justifique abandoná-lo 
Daniel, a impressão que eu tenho é que você não tá sabendo usar o hibernate.
Pq todos os problemas que você relatou são contornáveis usando ele apropriadamente. Por exemplo:
Isso me parece falta de gerenciamento correto de transações.
Já tentaram utilizar o iBatis (http://ibatis.apache.org)?
Acho ele bastante interessante e temos o controle dos sqls… fica a dica para quem não gosta muito do hibernate e não quer fazer toda a camada de persistência na mão!
Daniel, a impressão que eu tenho é que você não tá sabendo usar o hibernate.Pq todos os problemas que você relatou são contornáveis usando ele apropriadamente. Por exemplo:
Isso me parece falta de gerenciamento correto de transações.
Acho que seja problema no mapeamento dos relacionamentos…
Kra, leia a doc. sobre as diretivas nullable e updatable, para evitar que o hibernate gere e execute SQL desnecessário. Eu uso cascade com CascadeType.ALL nas annotations, e nullable/updatable nas JoinColumn pertinentes… e resolvi a parada.
Teria como vc postar uma cópia de um mapeamento seu ?
public class Noticia {
@OneToMany(cascade=CascadeType.ALL)
@JoinColumn(name="noticia", updatable=false)
private Set < FotoNoticia > fotos;
}
public class FotoNoticia extends Foto {
@ManyToOne(cascade=CascadeType.MERGE)
@JoinColumn(name="noticia", updatable=false)
private Noticia noticia;
}