Hibernate Query Language
Hibernate Query Language
Hibernate Query Language HQL is an object-oriented query language, similar to SQL, but instead
of operating on tables and columns, HQL works with persistent objects and their properties. HQL
queries are translated by Hibernate into conventional SQL queries which in turns perform action
on database.
Although you can use SQL statements directly with Hibernate using Native SQL but I would
recommend to use HQL whenever possible to avoid database portability hassles, and to take
advantage of Hibernate's SQL generation and caching strategies.
Keywords like SELECT , FROM and WHERE etc. are not case sensitive but properties like table and
column names are case sensitive in HQL.
FROM Clause
You will use FROM clause if you want to load a complete persistent objects into memory. Following
is the simple syntax of using FROM clause:
If you need to fully qualify a class name in HQL, just specify the package and class name as
follows:
AS Clause
The AS clause can be used to assign aliases to the classes in your HQL queries, specially when you
have long queries. For instance, our previous simple example would be the following:
The AS keyword is optional and you can also specify the alias directly after the class name, as
follows:
SELECT Clause
The SELECT clause provides more control over the result set than the from clause. If you want to
obtain few properties of objects instead of the complete object, use the SELECT clause. Following
is the simple syntax of using SELECT clause to get just first_name field of the Employee object:
It is notable here that Employee.firstName is a property of Employee object rather than a field of
the EMPLOYEE table.
WHERE Clause
If you want to narrow the specific objects that are returned from storage, you use the WHERE
clause. Following is the simple syntax of using WHERE clause:
ORDER BY Clause
To sort your HQL query's results, you will need to use the ORDER BY clause. You can order the
results by any property on the objects in the result set either ascending ASC or descending DESC.
Following is the simple syntax of using ORDER BY clause:
String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC";
Query query = session.createQuery(hql);
List results = query.list();
If you wanted to sort by more than one property, you would just add the additional properties to
the end of the order by clause, separated by commas as follows:
GROUP BY Clause
This clause lets Hibernate pull information from the database and group it based on a value of an
attribute and, typically, use the result to include an aggregate value. Following is the simple syntax
of using GROUP BY clause:
UPDATE Clause
Bulk updates are new to HQL with Hibernate 3, and deletes work differently in Hibernate 3 than
they did in Hibernate 2. The Query interface now contains a method called executeUpdate for
executing HQL UPDATE or DELETE statements.
The UPDATE clause can be used to update one or more properties of an one or more objects.
Following is the simple syntax of using UPDATE clause:
INSERT Clause
HQL supports INSERT INTO clause only where records can be inserted from one object to another
object. Following is the simple syntax of using INSERT INTO clause:
Aggregate Methods
HQL supports a range of aggregate methods, similar to SQL. They work the same way in HQL as in
SQL and following is the list of the available functions:
The distinct keyword only counts the unique values in the row set. The following query will return
only unique count:
1 Query setFirstResultintstartPosition
This method takes an integer that represents the first row in your result set, starting with
row 0.
2 Query setMaxResultsintmaxResult
This method tells Hibernate to retrieve a fixed number maxResults of objects.
Using above two methods together, we can construct a paging component in our web or Swing
application. Following is the example which you can extend to fetch 10 rows at a time: