Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Diferenças HQL vs JPQL?

E ae pessoal tudo bem?

Quais as principais diferenças entre o JPQL e o HQL? Existem funções que existem em um que não existe em outro?

Encontrei a seguinte informação na pagina do Hibernate

"The Hibernate Query Language (HQL) and Java Persistence Query Language (JPQL) are both object model focused query languages similar in nature to SQL. JPQL is a heavily-inspired-by subset of HQL. A JPQL query is always a valid HQL query, the reverse is not true however."

Quando ele indica que o JPQL é um sub-conjunto e até que todo JPQL é uma HQL valida mas o contrario não é verdade, significa que ele tem menos funcionalidades que o HQL ?

3 respostas
solução!

Boa noite, Marcelo! Como vai?

A JPQL é a linguagem de consulta padrão da especificação JPA! Já a HQL é a linguagem de consulta do Hibernate! Isso quer dizer que o JPQL vai funcionar se vc estiver usando o Hibernate ou outra implementação da especificação JPA ( como o EclipseLink, por exemplo ). Já a HQL só funcionará se vc estiver usando o Hibernate! E sim, como a HQL é de propriedade do Hibernate, ela terá funcionalidades extras além das definidas pela JPQL!

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!

E ae Professor Gabriel, tudo bem?

Muito obrigado pela resposta, entendi a idéia aqui.

Apesar de se ouvir falar do EclipseLink, parece que o Hibernate toma muito mais parte no mercado. Se partirmos da premissa que não mudaremos nosso Provider (Alguém faz isso?) de Hibernate -> EclipseLink, seria mais interessante então mantermos a utilização do HQL, pelas funcionalidades extras?Ou no dia a dia, o JPQL nos servirá bem ?

Um grande abraço!

Opa, Marcelo! Tudo ótimo!

Na realidade não é tão incomum trocar de implementação justamente devido a essas especificidades que cada uma delas oferece! Então, pode ocorrer de vc começar um projeto com o Hibernate mas no meio do desenvolvimento perceber que determinado problema é resolvido de forma mais performática ou mais elegante pelo EclipseLink e isso fazer com que a equipe troque a implementação.

Sendo assim, a boa prática é sempre usar a muitíssimo conhecida máxima: programe orientado à interfaces e especificações e não orientado à implementação. Afinal de contas, na maioria esmagadora dos casos não temos total garantia do que virá no futuro. Contudo, se vc está inserido num contexto onde tem total garantia de que não precisará mudar, então não há problema nenhum se valer das melhorias extras dadas pela implementação escolhida.

Pegou a ideia? Qualquer coisa é só falar!

Grande abraço e bons estudos, meu aluno!