Sobes.tech
Middle

Qual é a diferença entre JPQL e HQL?

sobes.tech IA

Resposta da IA

JPQL (Java Persistence Query Language) — uma linguagem de consulta padronizada para Java Persistence API (JPA). HQL (Hibernate Query Language) — uma linguagem de consulta específica para o framework Hibernate.

Principais diferenças:

  • Padronização: JPQL faz parte do padrão JPA, HQL é específico do Hibernate.
  • Suporte a funções: HQL pode incluir funções e recursos específicos do Hibernate que podem não estar presentes no JPQL (por exemplo, criteria.setResultTransformer).
  • Desempenho: Na maioria dos casos, o desempenho é comparável, pois ambas as linguagens são traduzidas para SQL. No entanto, algumas otimizações podem ser específicas da implementação (Hibernate no caso do HQL).
  • Portabilidade: JPQL é mais portátil entre diferentes implementações de JPA (Hibernate, EclipseLink, OpenJPA), enquanto HQL está ligado ao Hibernate.

Exemplo de uma consulta simples em ambas as linguagens:

// JPQL
SELECT p FROM Product p WHERE p.price > 100

// HQL
SELECT p FROM Product p WHERE p.price > 100

Embora a sintaxe de consultas simples seja frequentemente idêntica, em cenários mais complexos, o HQL pode oferecer funcionalidades adicionais não previstas no padrão JPQL. Recomenda-se usar JPQL para garantir a máxima portabilidade da aplicação entre diferentes provedores de JPA.