HQL jest obiektowym językiem zapytań, mającym wiele wspólnego z SQL-em. Podstawową różnicą jest to, że HQL jest dosłownie językiem zapytań - nie można za jego pomocą wstawiać, zmieniać ani usuwać danych - jedynie otrzymywać. Zapytania w HQL-u najczęściej wykorzystuje się w obiekcie klasy Query. Przykładowo:
Query q = session.createQuery("from User u where u.firstname = :fname");
q.setString("fname", "Max");
List result = q.list();
Powyższe zapytanie wyszukuje obiekty klasy (nie z tabeli!) User
po atrybucie firstname. Po przygotowaniu zapytania ustaliliśmy zmienną fname
na konkretną wartość i metodą list()
poprosiliśmy o listę wyników.
HQL ma bardzo duże możliwości, pozwala na przykład:
group by
, having
, oraz funkcji typu sum
, min
,
oraz max
.