Hibernate Query Language (HQL) is an object-oriented query language similar to SQL, but designed for Hibernate. It operates on entity objects instead of database tables.
Select All Records:
Equivalent to: SELECT * FROM student;
Uses entity name (Student) instead of table name.
import java.util.List;
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
String hql = "FROM Student";
List students = session.createQuery(hql, Student.class).getResultList();
// Loop using for-each
for (Student student : students) {
System.out.println("Name: " + student.getName());
System.out.println("----------------------");
}
transaction.commit();
session.close();
Select Specific Columns:
Returns specific fields instead of full entity objects.
import java.util.List;
String hql = "SELECT s.name, s.email FROM Student s";
List
HQL with WHERE Clause:
Uses :parameter to prevent SQL injection.
Equivalent SQL: SELECT * FROM student WHERE name = 'Alice';
String hql = "FROM Student ORDER BY name ASC";
List students = session.createQuery(hql, Student.class).getResultList();
ORDER BY DESC
Sorts by age in descending order.
String hql = "FROM Student ORDER BY age DESC";
List students = session.createQuery(hql, Student.class).getResultList();
Filtering with LIKE (Pattern Matching):
Fetches all students whose names start with 'A'.
String hql = "FROM Student WHERE name LIKE 'A%'";
List students = session.createQuery(hql, Student.class).getResultList();
HQL Joins:
Inner Join
Fetches students enrolled in Java course.
String hql = "SELECT s FROM Student s INNER JOIN s.courses c WHERE c.title = 'Java'";
List students = session.createQuery(hql, Student.class).getResultList();
Left Join
Includes students even if they don’t have courses.
String hql = "SELECT s FROM Student s LEFT JOIN s.courses c";
List students = session.createQuery(hql, Student.class).getResultList();
Fetch Join (Eager Loading)
Prevents LazyInitializationException by eagerly fetching related entities.
String hql = "FROM Student s JOIN FETCH s.courses";
List students = session.createQuery(hql, Student.class).getResultList();
Equivalent SQL: UPDATE student SET age = 25 WHERE name = 'Alice';
String hql = "UPDATE Student SET age = :newAge WHERE name = :studentName";
int updatedCount = session.createQuery(hql)
.setParameter("newAge", 25)
.setParameter("studentName", "Alice")
.executeUpdate();
Deleting Data in HQL:
Equivalent SQL: DELETE FROM student WHERE name = 'Bob';
String hql = "DELETE FROM Student WHERE name = :studentName";
int deletedCount = session.createQuery(hql)
.setParameter("studentName", "Bob")
.executeUpdate();
Pagination in HQL:
Hibernate allows pagination using setFirstResult() and setMaxResults().
String hql = "FROM Student";
List students = session.createQuery(hql, Student.class)
.setFirstResult(5) // Skips first 5 records (Page 2)
.setMaxResults(5) // Fetch next 5 records
.getResultList();
Named Queries (@NamedQuery):
A Named Query allows you to define HQL queries inside entity classes.
Benefits: Code is cleaner & easier to maintain.
Defining Named Query:
@Entity
@NamedQuery(name = "Student.findByName", query = "FROM Student WHERE name = :name")
public class Student {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
}
Using Named Query:
List students = session.createNamedQuery("Student.findByName", Student.class)
.setParameter("name", "Alice")
.getResultList();
We use cookies and similar technologies to enhance your browsing experience, serve personalized content and advertisements, and analyze our traffic.
By clicking "Accept All", you consent to our use of cookies and the processing of your personal data for these purposes.
You can manage your preferences or learn more in our
Privacy Policy and
Cookie Policy.