HQL e SQL, diferença.

Java

11/01/2013

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?
Eduardo Pessoa

Eduardo Pessoa

Curtidas 0

Melhor post

Henrique Weissmann

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.
GOSTEI 1

Mais Respostas

Diogo Souza

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. :)
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

11/01/2013

existe alguma "contra indicação"??? ou pode-se utilizar sem problemas???

obrigado
GOSTEI 0
Diogo Souza

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

Eduardo Pessoa

11/01/2013

blz, tem algum tutorial bem simples e em portugues para me ajudar a esclarecer as ideias???

obrigado
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

11/01/2013

tem???
GOSTEI 0
Alisson Santos

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
GOSTEI 0
Davi Costa

Davi Costa

11/01/2013

aki na própria devmedia tem diversos.. é ó usar as palavras-chave nas pesquisas

att Davi
GOSTEI 0
Danilo Gomes

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.
GOSTEI 0
Eduardo Pessoa

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


ok Alisson, obrigado
GOSTEI 0
Eduardo Pessoa

Eduardo Pessoa

11/01/2013

obrigado pelas infos.

Davi, Grupo Midas
GOSTEI 0
José

José

11/01/2013

Como a dúvida aparentemente foi sanada, estou dando o tópico por concluído.
GOSTEI 0
POSTAR