Hibernate Query Language

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<Student> 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<Object[]> results = session.createQuery(hql,Object[].class).getResultList();
for (Object[] row : results) {
System.out.println("Name: " + row[0] + ", email: " + row[1]);
}
transaction.commit();
session.close();

HQL with WHERE Clause:

  • Uses :parameter to prevent SQL injection.
  • Equivalent SQL: SELECT * FROM student WHERE name = 'Alice';
Session session = HibernateUtil.getSession();
Transaction transaction = session.beginTransaction();
String hql = "FROM Student WHERE name = :studentName";
Student student = session.createQuery(hql, Student.class)
.setParameter("studentName", "David")
.uniqueResult();
System.out.println(student.getEmail());
transaction.commit();
session.close();

Ordering Results:

ORDER BY

  • Sorts results alphabetically by name.
String hql = "FROM Student ORDER BY name ASC";
List<Student> 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<Student> 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<Student> 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<Student> 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<Student> 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<Student> students = session.createQuery(hql, Student.class).getResultList();

Aggregation Functions (COUNT, SUM, AVG, MIN, MAX):

Count Total Students

String hql = "SELECT COUNT(s) FROM Student s";
Long count = session.createQuery(hql, Long.class).getSingleResult();

Find Sum Age

String hql = "SELECT SUM(s) FROM Student s";
Integer count = session.createQuery(hql, Integer.class).getSingleResult();

Find Average Age

String hql = "SELECT AVG(s.age) FROM Student s";
Double avgAge = session.createQuery(hql, Double.class).getSingleResult();

Find Minimum Age

String hql = "SELECT MIN(s.age) FROM Student s";
Integer minAge = session.createQuery(hql, Integer.class).getSingleResult();

Find Maximum Age

String hql = "SELECT MAX(s.age) FROM Student s";
Integer minAge = session.createQuery(hql, Integer.class).getSingleResult();

Updating Data in HQL:

  • 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<Student> 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<Student> students = session.createNamedQuery("Student.findByName", Student.class)
.setParameter("name", "Alice")
.getResultList();

Whereisstuff is simple learing platform for beginer to advance level to improve there skills in technologies.we will provide all material free of cost.you can write a code in runkit workspace and we provide some extrac features also, you agree to have read and accepted our terms of use, cookie and privacy policy.
© Copyright 2024 www.whereisstuff.com. All rights reserved. Developed by whereisstuff Tech.