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.