Tava lendo sobre o hibernate e tive a impressão q ele não é indicado para se trabalhar com querys muito complexas que utilizam funções mt específicas de cada banco (ex: decode), pois requer um trabalho enorme para deixas compatíveis com o hibernate. Isso procede?
procede, sem falar que você perde um pouco em performance também. Deve-se citar que qualquer função nativa do SGBD causa perda de portabilidade.
jason_bourne
Então eu só devo usar hibernate para querys simples? do tipo crud?
Aleksandro
Salve galera,
Estou começando a fuçar no struts 2 com a config acima e no site da apache há um exemplo , porém segui o exemplo certinho conforme esta no site e esta me dando a seguinte mensagem, já fiz uma série de testes e não consegui identificar apenas pelo log do erro, gostaria de saber se alguém pode me dar uma luz, valeu
SEVERE:Contextinitializationfailedorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname‘personService’:Injectionofpersistencemethodsfailed;nestedexceptionisorg.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname‘entityManagerFactory’definedinServletContextresource[/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: No persistence units parsed from {classpath*:META-INF/persistence.xml}atorg.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:314)atorg.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:986)…
Aleks
L
lgweb
O hibernate é um framework para ser utilizado em aplicações que contem um rico modelo oo
em que a logica da aplicação fica na propria aplicação java ,e nao no banco de dados que é caracterizado como um pobre modelo
mas para quem quer utilizar funções especificas do banco melhor utilizar jdbc.
O hibernate é um framework para ser utilizado em aplicações que contem um rico modelo oo
em que a logica da aplicação fica na propria aplicação java ,e nao no banco de dados que é caracterizado como um pobre modelo
mas para quem quer utilizar funções especificas do banco melhor utilizar jdbc.
Vlw pela explicação!
P
prsantos
Eduardo!
Estou tentando desenvolver uma classe DAO Genérica, não se importando com a tabela e conexão usada, porém não tenhoa muita prática em JAVA, podemos então nos ajudar. Se for de sei interesse posso disponibilizar aqui no grupo minhas idéias já prontas.
ué… acho que exagerei um pouco na portabilidade rs. Mas ja tivemos problemas com consultas bem complexas que retornam milhares de registros, e que o cliente pediu a alteração do sistema porque a performance do hibernate perto das queries nativas é absurdamente inferior…
Você pode usar CASE…WHEN…ELSE…END ao invés de decode().
jason_bourne
Absurdamente inferior? nossa…pq usam o hibernate então?
T
Tecnoage
porque foi 1 caso em que realmente o banco era muito grande… Foi a excessão à regra…
T
Tecnoage
há consultas que demoram tipo, 12 horas para serem realizadas com SPs. Detalhe… banco Oracle
ddduran
é por isso que quem entende de tecnologia somos nos e não os clientes, ne?
com base em que artigo vem essa informação do “cliente”?
alem do mais quando você faz uma query nativa no hibernate é o mesmo que executar num Statement
jason_bourne
Mas para pequenas consultas, o hibernate vai de boa?
_fs
Cara, a UNICA coisa que importa é o SQL gerado pelo Hibernate. A não ser que precise de funções aliens de seu banco de dados, basta usar HQL e pronto.
Caso precise das funções aliens, e realmente há casos para isso, basta fazer session.connection() e pirar a batatinha no jdbc.
ddduran
bom ai o amigo lgweb definiu bem por que isso acontece.
mais no hibernate ia demorar 12h + 5min
ou seja insignificante
alem do mais o Hibernate funciona assim
existem coisas que o Hibernate ajuda para todas as outras coisas você pode passar por cima dele
ele não é tão extremista
ddduran
pras complexas tambem
faelcavalcanti
não significa que por determinados casos específicos que seja a solução abstenir o uso do hibernate ou consequentemente do desenvolvimento ORM. casos específicos poderam ser tranquilarmente desenvolvidos em outros frameworks como JPA, iBATIS ou até mesmo JDBC.
agora acho estranho uma consulta ter que retornar milhares de registros em uma consulta. existem certos pontos a serem repensados. não vejo necessidade disto. hoje a internet está mais interativa e as requisições soam por demanda. o usuário ou product owner deve conhecer estes princípios.
pcalcado
Se isso for OLAP você nãod everia estar utilizando Hibernate de qualquer forma.
Se isso for OLTP você provavelmente tem um problema é no modelo de dados e não no ORM utilizado.
rodrigoallemand
Se isso for OLAP você nãod everia estar utilizando Hibernate de qualquer forma.
Se isso for OLTP você provavelmente tem um problema é no modelo de dados e não no ORM utilizado.
12hs pra rodar uma query no banco… ORACLE???
O problema é bem maior do que um erro na modelagem… Chame o Padre Quevedo pra te ajudar!!! “Isso é coisa do Psico! Isso ‘no ecxiste’!”
J2Alex
Olá Orlando,
problemas de performance com hibernate são comuns para a maioria dos usuários, mas eu posso afirmar que em quase a totalidade dos casos é devido à falta de conhecimento mais profundo do seu funcionamento. Trabalho diretamente com hibernate e posso te afirmar que ele é recomendável para 99,99 % dos casos. Existem necessidades muito específicas onde realmente ele não é aplicável, mas isso são exceções. Já consegui melhorar a performance de consultas em até 80%, fazendo otimizações nos mapeamentos. O hibernate é muito flexível, mas entre saber o trivial e ter um conhecimento mas apurado do seu funcionamento, há uma longa estrada a caminhar.
Agora, consultas que demoram 12 horas? Há algo de muito errado aí…
eduacsp, não… isso não procede…
jason_bourne
Olá Orlando,
problemas de performance com hibernate são comuns para a maioria dos usuários, mas eu posso afirmar que em quase a totalidade dos casos é devido à falta de conhecimento mais profundo do seu funcionamento. Trabalho diretamente com hibernate e posso te afirmar que ele é recomendável para 99,99 % dos casos. Existem necessidades muito específicas onde realmente ele não é aplicável, mas isso são exceções. Já consegui melhorar a performance de consultas em até 80%, fazendo otimizações nos mapeamentos. O hibernate é muito flexível, mas entre saber o trivial e ter um conhecimento mas apurado do seu funcionamento, há uma longa estrada a caminhar.
Agora, consultas que demoram 12 horas? Há algo de muito errado aí…
eduacsp, não… isso não procede…
Bota longa caminhada nisso…
T
Tecnoage
Olá Orlando,
problemas de performance com hibernate são comuns para a maioria dos usuários, mas eu posso afirmar que em quase a totalidade dos casos é devido à falta de conhecimento mais profundo do seu funcionamento. Trabalho diretamente com hibernate e posso te afirmar que ele é recomendável para 99,99 % dos casos. Existem necessidades muito específicas onde realmente ele não é aplicável, mas isso são exceções. Já consegui melhorar a performance de consultas em até 80%, fazendo otimizações nos mapeamentos. O hibernate é muito flexível, mas entre saber o trivial e ter um conhecimento mas apurado do seu funcionamento, há uma longa estrada a caminhar.
Agora, consultas que demoram 12 horas? Há algo de muito errado aí…
eduacsp, não… isso não procede…
ops rs É meu, há casos e há casos… Houve um projeto por aqui por exemplo em que o cliente fez o favor de enviar os Pojos anotados em um jar, e não aceita alterações nele (Exemplo). Mas provavelmente falta conhecimento sim… Esse tipo de consulta é comum neste cliente específico. São normais consultas para emissão de relatórios que demorem horas, mas hoje são sempre feitas em PL/SQL (algumas mesmo assim demoram horas). Essa consulta ( não é bem somente uma consulta na verdade, é um conjunto delas. rs ) é excessão, mas acontece.
T
Tecnoage
Olá Orlando,
problemas de performance com hibernate são comuns para a maioria dos usuários, mas eu posso afirmar que em quase a totalidade dos casos é devido à falta de conhecimento mais profundo do seu funcionamento. Trabalho diretamente com hibernate e posso te afirmar que ele é recomendável para 99,99 % dos casos. Existem necessidades muito específicas onde realmente ele não é aplicável, mas isso são exceções. Já consegui melhorar a performance de consultas em até 80%, fazendo otimizações nos mapeamentos. O hibernate é muito flexível, mas entre saber o trivial e ter um conhecimento mas apurado do seu funcionamento, há uma longa estrada a caminhar.
Agora, consultas que demoram 12 horas? Há algo de muito errado aí…
eduacsp, não… isso não procede…
ops rs É meu, há casos e há casos… Houve um projeto por aqui por exemplo em que o cliente fez o favor de enviar os Pojos anotados em um jar, e não aceita alterações nele (Exemplo). Mas provavelmente falta conhecimento sim… Esse tipo de consulta é comum neste cliente específico. São normais consultas para emissão de relatórios que demorem horas, mas hoje são sempre feitas em PL/SQL (algumas mesmo assim demoram horas). Essa consulta ( não é bem somente uma consulta na verdade, é um conjunto delas. rs ) é excessão, mas acontece.
OPS esqueci!!! Parabéns Alexandre!!! hehehe
jason_bourne
Olá Orlando,
problemas de performance com hibernate são comuns para a maioria dos usuários, mas eu posso afirmar que em quase a totalidade dos casos é devido à falta de conhecimento mais profundo do seu funcionamento. Trabalho diretamente com hibernate e posso te afirmar que ele é recomendável para 99,99 % dos casos. Existem necessidades muito específicas onde realmente ele não é aplicável, mas isso são exceções. Já consegui melhorar a performance de consultas em até 80%, fazendo otimizações nos mapeamentos. O hibernate é muito flexível, mas entre saber o trivial e ter um conhecimento mas apurado do seu funcionamento, há uma longa estrada a caminhar.
Agora, consultas que demoram 12 horas? Há algo de muito errado aí…
eduacsp, não… isso não procede…
ops rs É meu, há casos e há casos… Houve um projeto por aqui por exemplo em que o cliente fez o favor de enviar os Pojos anotados em um jar, e não aceita alterações nele (Exemplo). Mas provavelmente falta conhecimento sim… Esse tipo de consulta é comum neste cliente específico. São normais consultas para emissão de relatórios que demorem horas, mas hoje são sempre feitas em PL/SQL (algumas mesmo assim demoram horas). Essa consulta ( não é bem somente uma consulta na verdade, é um conjunto delas. rs ) é excessão, mas acontece.
Eu justamente estou tendo que converter um pl/sql de 1300 linhas pra java. Pensei em usar hibernate, mas como não manjo levaria mt tempo para aprende-lo e depois conseguir algum resultado. Tive que criar quase 50 beans de entidade e dezenas de DAOs…na verdade ainda estou criando.
L
lgweb
sera que vc não esta utilizando "from clientes " em uma tabela com 2000000.000 registros ?
rsrsrsrsrsrsrsr
T
Tecnoage
então, esse é um “caso de insucesso” rs que me contaram algum tempo atrás. Não sei exatamente como as coisas estavam feitas. Só sei esses dados absurdos e das consultas que o pessoal que fica alocado nesse cliente de vez em quando comenta… Mas são bem mais dados que 200.000 registros…
J2Alex
Valeu pelos parabens… :lol:
marciosantri
Como por aqui utilizamos muitos recursos do banco (Oracle, no caso) e pelo menos por enquanto não temos a intenção de fazer um software que funcione em diversos bancos, preferimos desenvolver uma biblioteca de acesso utilizando o JDBC só que facilitando (e muito) as consultas e a criação de objetos. Agilidade na criação de classes e na busca ao mesmo tempo.
julynhaprado
Bom dia pessoal,
Tenho uma aplicação que usa Hibernate, Spring Security e PrimeFaces, porém algumas páginas com demoram renderizar porque a consulta demora muito para retornar a lista.
Sei pouco sobre Hibernate, e gostaria de saber uma forma de otimizar algumas consultas no BD (postgresql).
Li a respeito dos mapeamentos porém não consegui implementá-los de uma forma correta para que se torne mais rápidas as buscas.
Vocês indicam alguma coisa? Algum material?
Ahhh, também li a documentação porém como já disse não consegui implementar.
O pool de conexões está configurado, e achei muitas formas de fazer isso… Sabe aquela sensação de “será que estou fazendo certo?” “é assim mesmo?”
:roll:
Já tentei, mas quando tem paginação eu clico na página 2 e demora também.
ErickRAR
E com o cache do hibernate? Nunca utilizei, mas também é uma solução.
julynhaprado
Tentei usar, ainda não obtive sucesso.
Vou continuar tentando, já que você disse que é uma solução.
Mais alguma sugestão?
fantomas
julynhaprado, performance envolve muitos detalhes:
Já verificou se as tabelas envolvidas possuem índices que satisfazem a query?
Já comparou a execução da query fora e dentro do hibernate?
Já verificou se é possível otimizar a query ainda mais?
Você tem algum DBA para verificar estas execuções?
Sempre foi lento ou ficou lento recentemente?
…
flws
julynhaprado
fantomas:
julynhaprado, performance envolve muitos detalhes:
Já verificou se as tabelas envolvidas possuem índices que satisfazem a query?
Já comparou a execução da query fora e dentro do hibernate?
Já verificou se é possível otimizar a query ainda mais?
Você tem algum DBA para verificar estas execuções?
Sempre foi lento ou ficou lento recentemente?
…
flws
Sim, as tabelas possuem índices que satisfazem a query.
Eis a questão, acredito que está aí o problema. O hibernate busca objetos desnecessários, e isso executado sem o hibernate é rápido. Por isso acredito que seja o mapeamento.
Cogitei essa possibilidade, porém acho que já estão otimizadas. Acredito que a causa seja o hibernate buscar objetos desnecessários.
Aqui não temos DBA.
Como o número de cadastros aumentou, isso aconteceu recentemente. Os dados aumentaram nas tabelas.
Isso acontece na execução do sistema todo onde possuo um grande número de registros nas tabelas no banco de dados.
ErickRAR
Também pode ser o Lazy de seus relacionamentos, dê uma pesquisada nisso.
ManoJava
Bom dia!!
Utilize o SqlDeveloper para rodar suas queryes e veja o plano de execução e explicação, e veja se também vc nao esta fazendo nenhum cross join.
Att.
fantomas
Então july, concordo com o ErickRAR, verifique as estratégias para utilizar LAZY.
Se ao tentar aplicar o LAZY vc achar que é um “puta pé no s@C#”, que é chato ou até difícil e confuso saiba que é normal.
Detalhe: Se o LAZY for a solução provavelmente o sistema inteiro (o modelo) deve estar afetado, portanto selecione um único módulo para ajustar; se tudo der certo propague a solução, caso seja necessário, para as outras áreas.