Hibernate - JDBC

Hoje utilizo hibernate, porém estou tendo muitos problemas com deadlock no banco de dados, devido a alta concorrência do sistema, e constante inserts e updates.

Estou pensando em migrar o sistema, tirando o hibernate e usando diretamente JDBC para aumentar a performance do sistema, e diminuir a quantidade de deadlocks.

Porém (pelo que vejo na internet) quase ninguém usa mais java direto com o jdbc, e sim usando sempre alguma ferramente ORM (Hibernate, toplink…etc).

Será que o hibernate vai dar conta em sistema de alta concorrencia? Vale ou não a pena migrar para JDBC?

O Hibernate gera queries SQL reais de acordo com as configurações de suas entities.

Pode ser ques essas queries sejam muito complicadas, e você precise dar uma “tunada” na configuração, ou até partir pro JDBC. Mas isso tudo é um “pode”. Por ser altamente concorrente e ter muitos inserts e updates, como você mesmo disse, é possivel que até as queries puras sejam demoradas.

A coisa é mais complicada do que parece e não depende de soluções simples como partir pro JDBC. Dê uma olhada nas queries executadas, veja índices do banco, verifique a possibilidade de criar bancos redundantes… Qualquer solução é válida, mas o melhor depende de uma investigação no seu sistema.

Em algumas querys, estou executando (pelo hibernate) como querys nativas, o que deu uma boa melhora na performance. Mas meu maior receio é que em tudo de java que vejo na internet é com o uso de ferramentas ORM, e trocando para JDBC estar “regredindo” minha aplicação tecnologicamente.

Pode ser que na internet tudo esteja com ORM para facilitar o entendimento, mas da a impressão que não se usa mais o JDBC direto.

[quote=eletrodm]Em algumas querys, estou executando (pelo hibernate) como querys nativas, o que deu uma boa melhora na performance. Mas meu maior receio é que em tudo de java que vejo na internet é com o uso de ferramentas ORM, e trocando para JDBC estar “regredindo” minha aplicação tecnologicamente.

Pode ser que na internet tudo esteja com ORM para facilitar o entendimento, mas da a impressão que não se usa mais o JDBC direto.[/quote]

Raramente se usa… o Hibernate é meio chato de configurar (“tunar” como falam por aí), mas se fizer um bom trabalho, ele fica tão bom quanto (ou melhor que) um acesso JDBC direto…

Estude o funcionamento dos JoinType’s, Fetch, etc… a própria documentação do Hibernate fornece algumas dicas importantes…

Docs: http://docs.jboss.org/hibernate/stable/core/reference/en/html/

Dicas: http://docs.jboss.org/hibernate/stable/core/reference/en/html/performance.html

A primeira coisa que vc tem que fazer é analisar o SQL gerado pelo Hibernate pra saber se ta sendo gerado coisa fora do normal, os pontos são os relacionamentos e os tamanhos das coleções que criam gargalos, como exemplo tem o caso dos relacionamentos 1:N, se vc não mapear corretamente(indicar quem é o dono da relação) o Hibernate gera um serie de updates desnecessarios.