Middle
Aký je rozdiel medzi JPQL a HQL?
sobes.tech AI
Odpoveď od AI
JPQL (Java Persistence Query Language) — štandardizovaný jazyk dotazov pre Java Persistence API (JPA). HQL (Hibernate Query Language) — špecifický jazyk dotazov pre framework Hibernate.
Hlavné rozdiely:
- Štandardizácia: JPQL je súčasťou štandardu JPA, HQL je špecifický pre Hibernate.
- Podpora funkcií: HQL môže obsahovať funkcie a možnosti špecifické pre Hibernate, ktoré môžu chýbať v JPQL (napríklad
criteria.setResultTransformer). - Výkon: Vo väčšine prípadov je výkon porovnateľný, pretože oba jazyky sa prekladajú do SQL. Niektoré optimalizácie však môžu byť špecifické pre implementáciu (Hibernate v prípade HQL).
- Prenosnosť: JPQL je viac prenosný medzi rôznymi implementáciami JPA (Hibernate, EclipseLink, OpenJPA), zatiaľ čo HQL je viazaný na Hibernate.
Príklad jednoduchého dotazu v oboch jazykoch:
// JPQL
SELECT p FROM Product p WHERE p.price > 100
// HQL
SELECT p FROM Product p WHERE p.price > 100
Hoci syntax jednoduchých dotazov je často rovnaká, v zložitejších scenároch môže HQL ponúkať ďalšie možnosti, ktoré nie sú v štandarde JPQL predvídané. Odporúča sa používať JPQL na zabezpečenie maximálnej prenosnosti aplikácie medzi rôznymi poskytovateľmi JPA.