Hibernate é ralmente necessario ou a melhor opção?

Bom dia galera,

Estou desenvolvendo um site utilizando Vraptor3, hibernate 3 e mysql, porem percebi que estou usando poucos recursos do hibernate, escolhi usa-lo mais por aprendizado e por achar que seria interessante, mas agora parei pra pensar e realmente nao sei se foi a melhor ideia, e como nao tenho conhecimento mais aprofundado sobre outras formas de se trabalhar o java com o BD queria saber a opinião de vcs sobre o q eu deveria usar, no caso estou usando o createSQLQuery do hibernate e escrevendo as querys na mão pq estou sem muito tempo para estudar o criteria e outros recursos que o hibernate oferece, nisso acredito estar perdendo performance ja que eu poderia usar outra forma de conexão ao BD ja q estou usando apenas querys nativas, com isso eu tiraria o hibernate fora e deixaria o site mais leve, acredito eu.

Bom, se você só usa queries nativas e não faz mapeamento objeto relacional, então é capaz que não haja motivo para usar o Hibernate mesmo. Minha única sugestão é que você mantenha o resto da aplicação alheia ao mecanismo de persistência.

Você poderia fazer na unha por JDBC sem problema.

Existem outras bibliotecas de JPA que tem menos depedências, a Batoo por exemplo, já teve testes de perfomance de até 15x melhor. [=

Hibernate tem um mundo de funções e vantagens que em geral não são utilizadas. [=

A vantagem é o ganho em desenvolvimento, a questão da perfomance… creio que pesaria em uma aplicações milhares de acessos e linhas no db. [=

[quote=Hebert Coelho]Você poderia fazer na unha por JDBC sem problema.

Existem outras bibliotecas de JPA que tem menos depedências, a Batoo por exemplo, já teve testes de perfomance de até 15x melhor. [=

Hibernate tem um mundo de funções e vantagens que em geral não são utilizadas. [=

A vantagem é o ganho em desenvolvimento, a questão da perfomance… creio que pesaria em uma aplicações milhares de acessos e linhas no db. [=[/quote]

A ideia é que futuramente tenha muitos acessos, vou dar uma estudada nesse batoo

[quote=renatomattos2912]A ideia é que futuramente tenha muitos acessos, vou dar uma estudada nesse batoo[/quote]Mas quando digo muitos, é muito mesmo. [=

Existem diversas técnicas de otimização que podem ser utilizadas, mas ainda assim em certos casos (coisas específicas) o jdbc é o indicado.

[quote=Hebert Coelho][quote=renatomattos2912]A ideia é que futuramente tenha muitos acessos, vou dar uma estudada nesse batoo[/quote]Mas quando digo muitos, é muito mesmo. [=

Existem diversas técnicas de otimização que podem ser utilizadas, mas ainda assim em certos casos (coisas específicas) o jdbc é o indicado. [/quote]

Entendi, bom vc acha q vale a pena eu arriscar com o batoo?? ja estou criando um projeto paralelo pra estudar ele de qualquer forma

Para criação de Batches, o hibernate não é muito indicado, preferindo-se mesmo acesso direto via jdbc.

[quote=renatomattos2912]Entendi, bom vc acha q vale a pena eu arriscar com o batoo?? ja estou criando um projeto paralelo pra estudar ele de qualquer forma[/quote]Diria que vale a pena criar a aplicação utilizando apenas anotações do JPA.

Caso sua aplicação seja toda anotada com JPA, para mudar de Batto para ElipseLink ou Hibernate, basta trocar o jar e o provider. [=

[quote=Hebert Coelho][quote=renatomattos2912]A ideia é que futuramente tenha muitos acessos, vou dar uma estudada nesse batoo[/quote]Mas quando digo muitos, é muito mesmo. [=

Existem diversas técnicas de otimização que podem ser utilizadas, mas ainda assim em certos casos (coisas específicas) o jdbc é o indicado. [/quote]

Assim, não dá pra dizer que você vai obter mais performance pelo simples fato de usar JDBC ou Hibernate ou o Baddo. O fato de que o site terá muitos acessos também não quer dizer muita coisa (pode ser que em 90% das requisições a aplicação não vá ao banco). Ou seja, você precisa analisar o problema antes. Vamos lá:

A questão Hibernate x JDBC é parecida com a questão Java x C++. De fato, é possível economizar recursos em termos de CPU e memória com o JDBC. Mas isso não quer dizer que seja fácil e nem sempre CPU e memória são gargalos. Geralmente, quando se trata de uma aplicação voltada ao usuário as preocupações de fato são: responsividade (o quão rápido a aplicação processa um requisição) e a escalabilidade (o quanto a aplicação suporta o crescimento). Nesses casos, os maiores gargalos estão relacionados a número de acessos ao banco de dados, tempo de duração das transações. etc. O Hibernate já faz um bom trabalho com relação a esses quesitos com recursos como o cache, execução tardia de DDL, etc.

É o mesmo caso da comparação entre o Hibernate e o Batto. Eu dei uma lida rápida em alguns sites, e até onde eu vi, o Batoo ganha do Hibernate em termos de CPU, que dificilmente é o gargalo no acesso ao banco de dados.

Por fim, nada te impede de usar mais de uma solução de persistência. Você pode usar o Hibernate para os casos gerais e o JDBC para os casos em que você precisa de um fine-tunning. Você só não pode tomar essa decisão de maneira “cega”.

[quote=rmendes08][quote=Hebert Coelho][quote=renatomattos2912]A ideia é que futuramente tenha muitos acessos, vou dar uma estudada nesse batoo[/quote]Mas quando digo muitos, é muito mesmo. [=

Existem diversas técnicas de otimização que podem ser utilizadas, mas ainda assim em certos casos (coisas específicas) o jdbc é o indicado. [/quote]

Assim, não dá pra dizer que você vai obter mais performance pelo simples fato de usar JDBC ou Hibernate ou o Baddo. O fato de que o site terá muitos acessos também não quer dizer muita coisa (pode ser que em 90% das requisições a aplicação não vá ao banco). Ou seja, você precisa analisar o problema antes. Vamos lá:

A questão Hibernate x JDBC é parecida com a questão Java x C++. De fato, é possível economizar recursos em termos de CPU e memória com o JDBC. Mas isso não quer dizer que seja fácil e nem sempre CPU e memória são gargalos. Geralmente, quando se trata de uma aplicação voltada ao usuário as preocupações de fato são: responsividade (o quão rápido a aplicação processa um requisição) e a escalabilidade (o quanto a aplicação suporta o crescimento). Nesses casos, os maiores gargalos estão relacionados a número de acessos ao banco de dados, tempo de duração das transações. etc. O Hibernate já faz um bom trabalho com relação a esses quesitos com recursos como o cache, execução tardia de DDL, etc.

É o mesmo caso da comparação entre o Hibernate e o Batto. Eu dei uma lida rápida em alguns sites, e até onde eu vi, o Batoo ganha do Hibernate em termos de CPU, que dificilmente é o gargalo no acesso ao banco de dados.

Por fim, nada te impede de usar mais de uma solução de persistência. Você pode usar o Hibernate para os casos gerais e o JDBC para os casos em que você precisa de um fine-tunning. Você só não pode tomar essa decisão de maneira “cega”.[/quote]

Entendi, muito obrigado

[quote=rmendes08][quote=Hebert Coelho][quote=renatomattos2912]A ideia é que futuramente tenha muitos acessos, vou dar uma estudada nesse batoo[/quote]Mas quando digo muitos, é muito mesmo. [=

Existem diversas técnicas de otimização que podem ser utilizadas, mas ainda assim em certos casos (coisas específicas) o jdbc é o indicado. [/quote]

Assim, não dá pra dizer que você vai obter mais performance pelo simples fato de usar JDBC ou Hibernate ou o Baddo. O fato de que o site terá muitos acessos também não quer dizer muita coisa (pode ser que em 90% das requisições a aplicação não vá ao banco). Ou seja, você precisa analisar o problema antes. Vamos lá:

A questão Hibernate x JDBC é parecida com a questão Java x C++. De fato, é possível economizar recursos em termos de CPU e memória com o JDBC. Mas isso não quer dizer que seja fácil e nem sempre CPU e memória são gargalos. Geralmente, quando se trata de uma aplicação voltada ao usuário as preocupações de fato são: responsividade (o quão rápido a aplicação processa um requisição) e a escalabilidade (o quanto a aplicação suporta o crescimento). Nesses casos, os maiores gargalos estão relacionados a número de acessos ao banco de dados, tempo de duração das transações. etc. O Hibernate já faz um bom trabalho com relação a esses quesitos com recursos como o cache, execução tardia de DDL, etc.

É o mesmo caso da comparação entre o Hibernate e o Batto. Eu dei uma lida rápida em alguns sites, e até onde eu vi, o Batoo ganha do Hibernate em termos de CPU, que dificilmente é o gargalo no acesso ao banco de dados.

Por fim, nada te impede de usar mais de uma solução de persistência. Você pode usar o Hibernate para os casos gerais e o JDBC para os casos em que você precisa de um fine-tunning. Você só não pode tomar essa decisão de maneira “cega”.[/quote]Eu concordo mano! Digamos que faltou especificar o que seria muitos acessos. My bad! :oops: :oops: :oops:

Geralmente usar hibernate não é problema, o problema é se não lidar adequadamente com cada tipo de caso, uso correto de lazy ou não é só o início. Uma coisa que é básica pra mim, em relatórios e consultas complexas prefira usar SQL nativo (named query no hibernate) ou se preferir ‘Criteria’ anule os lazys e aplique fetch joins como saídas performáticas usando as entidades, mas Criterias extensas demais podem ser complicadas para entender depois de um tempo sem ver, então escrever SQL é mais natural para esses casos de relatórios e consultas complexas, não sou purista mesmo. Fora isso, cadastros administrativos tranquilo usar os recursos normais no modelo de entidades, e telas mais voltadas a processos de negócio usar também normalmente, mas em pontos que forem críticos, avaliar necessidade de uso de SQL direto.

Tem que usar cada coisa que for te ajudar e não atrapalhar. E outra coisa que vejo muito é ficar se limitando a SQL ANSI sem necessidade, uma grande empresa que use por exemplo o Oracle não vai mudar de banco tão cedo. É tudo questão do caso como já falaram, então especifique melhor o seu.

Hibernate = Lixo (na minha opinião)

http://www.guj.com.br/java/252013-voce-nao-gosta-do-hibernate-eu-tb-nao-leia-para-entender-o-porque

http://mentablog.soliveirajr.com/2012/11/hibernate-is-more-complex-than-the-problem-it-tries-to-solve/

[quote=saoj]Hibernate = Lixo (na minha opinião)

http://www.guj.com.br/java/252013-voce-nao-gosta-do-hibernate-eu-tb-nao-leia-para-entender-o-porque

http://mentablog.soliveirajr.com/2012/11/hibernate-is-more-complex-than-the-problem-it-tries-to-solve/
[/quote]Por isso que sempre indico o EclipseLink ou o Batto (apesar de não ter testado). [=

Tenta esse: http://mentabean.soliveirajr.com

Respeito quem nao gosta do Hibernate tem suas razoes assim como eu nao gosto de JSF. Para quem gosta e ainda nao conhece aqui tem um texto interessante da caelum com resumo das possibilidades para bom uso do Hibernate, considerem o que for positivo pra voces em cada caso: http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/

[quote=javaflex]Respeito quem nao gosta do Hibernate tem suas razoes assim como eu nao gosto de JSF. Para quem gosta e ainda nao conhece aqui tem um texto interessante da caelum com resumo das possibilidades para bom uso do Hibernate, considerem o que for positivo pra voces em cada caso: http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/ [/quote]Pois é. O problema é que pessoas começam usar o Hibernate sem ao menos saber o que é JPA. Aí fica presa a um Framework, fazem código de péssima qualidade e depois acabam por culpar o framework…

Acho triste isso.

Já vi diversas pessoas criticando frameworks e quando eu pergunto pq elas dão motivos que não são verdadeiros… triste viu! -_-’’

[quote=Hebert Coelho][quote=javaflex]Respeito quem nao gosta do Hibernate tem suas razoes assim como eu nao gosto de JSF. Para quem gosta e ainda nao conhece aqui tem um texto interessante da caelum com resumo das possibilidades para bom uso do Hibernate, considerem o que for positivo pra voces em cada caso: http://blog.caelum.com.br/os-7-habitos-dos-desenvolvedores-hibernate-e-jpa-altamente-eficazes/ [/quote]Pois é. O problema é que pessoas começam usar o Hibernate sem ao menos saber o que é JPA. Aí fica presa a um Framework, fazem código de péssima qualidade e depois acabam por culpar o framework…

Acho triste isso.

Já vi diversas pessoas criticando frameworks e quando eu pergunto pq elas dão motivos que não são verdadeiros… triste viu! -_-’’[/quote]

Eu dei um monte de motivos aqui. :slight_smile:

http://mentablog.soliveirajr.com/2012/11/hibernate-is-more-complex-than-the-problem-it-tries-to-solve/

Claro que haverá sempre controvérsias e opiniões contrárias, mas acredito que minha opinião pessoal está bem elaborada.

Vc pode concordar ou descordar, mas pelo menos ela é uma opinião bem embasada e não apenas um maluco marretando alguma coisa.

Minha opinião é que o Hibernate fugiu do controle há muito tempo. Está pesado, complexo e obsoleto. Outras opções melhores evoluiram por fora.

ActiveRecord
iBatis
MentaBeans
jOOQ

e outras…

Eu não gosto nem de hibernate nem de JPA. E acredito que esses projetos são muito enganação do que qualquer outra coisa. Se você acha ruim JDBC na mão, que tal experimentar o MyBatis? Acho uma alternativa muito mais viável que hiba/jpa, fora que você tem mais controle do que faz e é mais rápido, mesmo sendo mais “verboso”.

P.S.: Alias… estou adorando estudar bancos NoSQL como MongoDB, usando com o Node.JS :wink:

[quote=Hebert Coelho][quote=saoj]Hibernate = Lixo (na minha opinião)

http://www.guj.com.br/java/252013-voce-nao-gosta-do-hibernate-eu-tb-nao-leia-para-entender-o-porque

http://mentablog.soliveirajr.com/2012/11/hibernate-is-more-complex-than-the-problem-it-tries-to-solve/
[/quote]Por isso que sempre indico o EclipseLink ou o Batto (apesar de não ter testado). [=[/quote]

Bom, mas pela argumentação do saoj, trocar o Hibernate por outra solução JPA seria trocar 6 por 1/2 dúzia …