Sobes.tech
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.