Hibernate Query Language
A Hibernate Query Language (HQL) a Hibernate saját, az SQL-hez nagyon hasonló lekérdező nyelve. Az SQL-el szemben azonban teljesen objektumorientált, így olyan lekérdezéseket írhatunk benne, melyekben a táblák és oszlopok helyett osztályneveket és adattagokat használhatunk. A HQL objektum-relációs modellre épül, rendkívül erőteljes, kezeli az öröklődést, a polimorfizmust és az asszociációt.
A Java osztályok és tulajdonságok kivételével a lekérdezések kis- és nagybetű érzéketlenek, tehát a SeLeCT megegyezik a sELEct-el illetve SELECT-tel, de az org.hibernate.eg.FOO nem azonos az org.hibernate.eg.Foo-val.
A HQL használatának előnyei
[szerkesztés]- Teljes mértékben támogatja a relációs műveleteket. Lehetővé teszi SQL lekérdezések reprezentálását objektumok formájában. Osztályokat és tulajdonságokat használ táblák és oszlopok helyett.
- Az eredményt objektumként szolgáltatja, amit könnyű használni. Ezzel leveszi a vállunkról az objektum létrehozásának és az eredményhalmazban található adatokkal való feltöltésének feladatát.
- A HQL teljesen támogatja a polimorfikus lekérdezéseket. Például a következő lekérdezés
from Cat as cat
nem csak a Cat osztály, hanem annak leszármazottjainak a példányait is visszaadja.
- A Hibernate lekérdezéseket könnyű megtanulni, és egyszerűen implementálhatók az alkalmazásokban.
- A HQL számos haladó funkciót tartalmaz, mint például az oldalszámozás, fetch join dinamikus profilozással, inner/outer/full join, direkt szorzatok. Továbbá támogatja a projekciót, aggregációt (max, avg) és csoportosítást, rendezést, allekérdezéseket és SQL funkcióhívásokat.
- A HQL-ben megírt lekérdezések adatbázis-függetlenek, ha az adatbázis támogatja az ennek alapjául szolgáló funkciót.
HQL szintaxisának megértése
[szerkesztés]Minden HQL a következő elemeket tartalmazhatja:
- klózok
- összesítő függvények
- allekérdezések
HQL klózok
[szerkesztés]- from
- select
- where
- order by
- group by
Összesítő függvények
[szerkesztés]HQL lekérdezések összesítő függvények eredményét is visszaadhatják. A támogatott függvények a következők:
- avg(...), sum(...), min(...), max(...)
- count(*)
- count(...), count(distinct ...), count(all...)
Aritmetikai operátorok, konkatenáció és SQL függvények is szerepelhetnek a select záradékban. Példák:
select cat.weight + sum(kitten.weight)
from Cat cat
join cat.kittens kitten
group by cat.id, cat.weight
select firstName||' '||initial||' '||upper(lastName) from Person
Allekérdezések
[szerkesztés]Az allekérdezés nem más, mint egy lekérdezésbe ágyazott lekérdezés.