Sobes.tech
Middle

Mis vahe on JPQL ja HQL?

sobes.tech AI

Vastus AI-lt

JPQL (Java Persistence Query Language) — standardiseeritud päringukeel Java Persistence API (JPA) jaoks. HQL (Hibernate Query Language) — spetsiifiline päringukeel Hibernate raamistikule.

Peamised erinevused:

  • Standardiseerimine: JPQL on osa JPA standardist, HQL on spetsiifiline Hibernate jaoks.
  • Funktsioonide tugi: HQL võib sisaldada Hibernate-spetsiifilisi funktsioone ja võimalusi, mis võivad puududa JPQL-st (näiteks criteria.setResultTransformer).
  • Jõudlus: Enamasti on jõudlus sarnane, kuna mõlemad keeled tõlgitakse SQL-ks. Kuid mõned optimeerimised võivad olla spetsiifilised rakendusele (Hibernate HQL puhul).
  • Ülekantavus: JPQL on rohkem ülekantav erinevate JPA rakenduste vahel (Hibernate, EclipseLink, OpenJPA), samas kui HQL on seotud Hibernate'iga.

Näide lihtsast päringust mõlemas keeles:

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

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

Kuigi lihtsate päringute süntaks on sageli sarnane, keerulisemates stsenaariumides võib HQL pakkuda täiendavaid võimalusi, mis ei ole standardi JPQL-s ette nähtud. Soovitatav on kasutada JPQL-i, et tagada maksimaalne rakenduse ülekantavus erinevate JPA pakkujate vahel.