Sobes.tech
Middle

Jaký je rozdíl mezi JPQL a HQL?

sobes.tech AI

Odpověď od AI

JPQL (Java Persistence Query Language) — standardizovaný jazyk dotazů pro Java Persistence API (JPA). HQL (Hibernate Query Language) — specifický jazyk dotazů pro framework Hibernate.

Hlavní rozdíly:

  • Standardizace: JPQL je součástí standardu JPA, HQL je specifický pro Hibernate.
  • Podpora funkcí: HQL může obsahovat funkce a možnosti specifické pro Hibernate, které mohou chybět v JPQL (například criteria.setResultTransformer).
  • Výkon: Ve většině případů je výkon srovnatelný, protože oba jazyky jsou překládány do SQL. Některé optimalizace však mohou být specifické pro implementaci (Hibernate v případě HQL).
  • Přenositelnost: JPQL je více přenositelný mezi různými implementacemi JPA (Hibernate, EclipseLink, OpenJPA), zatímco HQL je vázán na Hibernate.

Příklad jednoduchého dotazu v obou jazycích:

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

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

Ačkoliv syntaxe jednoduchých dotazů je často shodná, v složitějších scénářích může HQL nabízet dodatečné možnosti, které nejsou v standardu JPQL předvídány. Doporučuje se používat JPQL pro zajištění maximální přenositelnosti aplikace mezi různými poskytovateli JPA.