HQL e SQL, diferença.
sempre ouvir falar sobre HQL, mas na verdade não sei pra que serve, por exemplo, em que momento devo utilizar,
ele substitui o SQL?
ele substitui o SQL?
Eduardo Pessoa
Curtidas 0
Melhor post
Henrique Weissmann
24/01/2013
A história é a seguinte.
O HQL é a linguagem de pesquisa do Hibernate para buscar informações no banco de dados usando a metáfora dos objetos ao invés das tabelas diretamente. A idéia é simples: você escreve suas consultas usando os atributos e objetos que foram mapeados pela sua ferramenta de mapeamento objeto relacional (no caso, o Hibernate).
O HQL é muito inspirado em uma outra lingaugem chamada OQL, que foi uma tentativa de se padronizar este tipo de consulta.
Já o SQL (JDBC), você vai usar quando quiser interagir diretamente com as tabelas do seu banco de dados. Neste caso, você vai usar o SQL nativo mesmo. Sob o ponto de vista de performance, o HQL sempre vai ter um overhead: porque a consulta em cima dos objetos vai ser em seguida transformada em uma consulta SQL. Em um primeiro momento, parece que é muito mais lento, mas na maior parte das vezes, o que acontece é que fica mais rápido, porque são feitas otimizações no SQL gerado pelo HQL, otimizações estas que muitas vezes o desenvolvedor se esquece de fazer.
No entanto, há um custo aí. Há momentos em que você precisa de uma otimização ou outra que o HQL não vai saber gerar pra você. Ou mesmo o uso de recursos específicos do seu banco de dados que o HQL não vai acessar também e que podem te dar um ganho de performance monstro OU facilitar o seu desenvolvimento. Neste caso, claro, você vai ter perda de portabilidade, mas é aquela questão de saber dosar o uso de uma ou outra tecnologia.
Esta é a vantagem do JDBC sobre o HQL: você vai estar mais próximo das tabelas e consumindo menos recursos. É possível executar consultas nativas com o Hibernate? Sim: mas neste caso, se você não estiver usando uma sessão stateless, na realidade via ter código mais lento e que consome menos memória, porque estará, ao executar suas consultas, atualizando os dados da sessão corrente que seu código estiver usando.
O HQL é a linguagem de pesquisa do Hibernate para buscar informações no banco de dados usando a metáfora dos objetos ao invés das tabelas diretamente. A idéia é simples: você escreve suas consultas usando os atributos e objetos que foram mapeados pela sua ferramenta de mapeamento objeto relacional (no caso, o Hibernate).
O HQL é muito inspirado em uma outra lingaugem chamada OQL, que foi uma tentativa de se padronizar este tipo de consulta.
Já o SQL (JDBC), você vai usar quando quiser interagir diretamente com as tabelas do seu banco de dados. Neste caso, você vai usar o SQL nativo mesmo. Sob o ponto de vista de performance, o HQL sempre vai ter um overhead: porque a consulta em cima dos objetos vai ser em seguida transformada em uma consulta SQL. Em um primeiro momento, parece que é muito mais lento, mas na maior parte das vezes, o que acontece é que fica mais rápido, porque são feitas otimizações no SQL gerado pelo HQL, otimizações estas que muitas vezes o desenvolvedor se esquece de fazer.
No entanto, há um custo aí. Há momentos em que você precisa de uma otimização ou outra que o HQL não vai saber gerar pra você. Ou mesmo o uso de recursos específicos do seu banco de dados que o HQL não vai acessar também e que podem te dar um ganho de performance monstro OU facilitar o seu desenvolvimento. Neste caso, claro, você vai ter perda de portabilidade, mas é aquela questão de saber dosar o uso de uma ou outra tecnologia.
Esta é a vantagem do JDBC sobre o HQL: você vai estar mais próximo das tabelas e consumindo menos recursos. É possível executar consultas nativas com o Hibernate? Sim: mas neste caso, se você não estiver usando uma sessão stateless, na realidade via ter código mais lento e que consome menos memória, porque estará, ao executar suas consultas, atualizando os dados da sessão corrente que seu código estiver usando.
GOSTEI 1
Mais Respostas
Diogo Souza
11/01/2013
O [url="http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html"]HQL (Hibernate Query Language)[/url], é a linguagem usada pelo Hibernate para substituir o SQL puro.
Serve basicamente para fazer queries com os mesmos conceitos do SQL (insert's, cláusula where, joins..), porém em uma linguagem que usa diretamente as entidades mapeadas ao invés das tabelas. :)
Serve basicamente para fazer queries com os mesmos conceitos do SQL (insert's, cláusula where, joins..), porém em uma linguagem que usa diretamente as entidades mapeadas ao invés das tabelas. :)
GOSTEI 0
Eduardo Pessoa
11/01/2013
existe alguma "contra indicação"??? ou pode-se utilizar sem problemas???
obrigado
obrigado
GOSTEI 0
Diogo Souza
11/01/2013
Contra indicação com o HQL não, a menos que você esteja usando JDBC somente, aí nem poderá usar o HQL. Apenas evite queries nativas, elas burlam um pouco o conceito de multibanco do Hibernate! :)
GOSTEI 0
Eduardo Pessoa
11/01/2013
blz, tem algum tutorial bem simples e em portugues para me ajudar a esclarecer as ideias???
obrigado
obrigado
GOSTEI 0
Eduardo Pessoa
11/01/2013
tem???
GOSTEI 0
Alisson Santos
11/01/2013
Na web se encontra muito disso.
mais vou deixar dois links
http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
http://javafree.uol.com.br/topic-4348-%C3%93timo-tutorial-de-HQL-Hibernator-Query-Language.html
mais vou deixar dois links
http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
http://javafree.uol.com.br/topic-4348-%C3%93timo-tutorial-de-HQL-Hibernator-Query-Language.html
GOSTEI 0
Davi Costa
11/01/2013
aki na própria devmedia tem diversos.. é ó usar as palavras-chave nas pesquisas
att Davi
att Davi
GOSTEI 0
Danilo Gomes
11/01/2013
Cara, a única contra indicação também torna-se uma vantagem:
O HQL será traduzido em SQL em algum momento pra linguagem nativa da base que estiver usando.
Isso é "menos performático". Mas não é um problema, a perda é desprezível.
A vantagem é a portabilidade, pois ficará mais fácil migrar de uma base para outra com HQL.
O HQL será traduzido em SQL em algum momento pra linguagem nativa da base que estiver usando.
Isso é "menos performático". Mas não é um problema, a perda é desprezível.
A vantagem é a portabilidade, pois ficará mais fácil migrar de uma base para outra com HQL.
GOSTEI 0
Eduardo Pessoa
11/01/2013
Na web se encontra muito disso.
mais vou deixar dois links
http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
http://javafree.uol.com.br/topic-4348-%C3%93timo-tutorial-de-HQL-Hibernator-Query-Language.html
mais vou deixar dois links
http://www.tutorialspoint.com/hibernate/hibernate_query_language.htm
http://javafree.uol.com.br/topic-4348-%C3%93timo-tutorial-de-HQL-Hibernator-Query-Language.html
ok Alisson, obrigado
GOSTEI 0
Eduardo Pessoa
11/01/2013
obrigado pelas infos.
Davi, Grupo Midas
Davi, Grupo Midas
GOSTEI 0
José
11/01/2013
Como a dúvida aparentemente foi sanada, estou dando o tópico por concluído.
GOSTEI 0