Elefante Branco == Hibernate ==?

9 respostas
D

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?

9 Respostas

javaBeats

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 :wink: (méritos para a API de Persistência EJB3 =)

jtsato

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ê. :smiley: . É 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. :slight_smile:

T
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…

javaBeats

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 :smiley:

louds

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.

mutano

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!

javaBeats

louds:
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.

D

Teria como vc postar uma cópia de um mapeamento seu ?

javaBeats
public class Noticia {

    @OneToMany(cascade=CascadeType.ALL)
    @JoinColumn(name="noticia", updatable=false)
    private Set &lt FotoNoticia &gt fotos;

}

public class FotoNoticia extends Foto {

    @ManyToOne(cascade=CascadeType.MERGE)
    @JoinColumn(name="noticia", updatable=false)
    private Noticia noticia;

}
Criado 18 de agosto de 2006
Ultima resposta 19 de ago. de 2006
Respostas 9
Participantes 6