Hibernate Query Language
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 objektum-orientá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
- 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.
- 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
Minden Hibernate Query Language a következő elemeket tartalmazhatja:
- klózok
- csoportos függvények
- allekérdezések
HQL klózok
- from
- select
- where
- order by
- group by
Csoportos függvények
- avg(...), sum(...), min(...), max(...)
- count(*)
- count(...), count(distinct ...), count(all...)
Allekérdezések
Az allekérdezés nem más, mint egy lekérdezésbe ágyazott lekérdezés.