HQL (Hibernate Query Language) is Hibernate’s object-oriented query language that lets you query your database using your Java entity and property names, rather than database table or column names.
🔹 Key points:
✅ HQL is similar to SQL in syntax but works with entities, not tables, and fields, not columns.
✅ It’s database-independent — Hibernate translates HQL to the appropriate SQL dialect for your configured database.
✅ Supports powerful features like joins, group by, subqueries, and aggregate functions.
✅ Safer and more maintainable than raw SQL because it’s tightly integrated with your Java model.
🔹 Basic example:
Session session = sessionFactory.openSession();
String hql = "FROM User WHERE username = :username";
User user = session.createQuery(hql, User.class)
.setParameter("username", "john")
.uniqueResult();
✅ Here:
FROM User
uses the Java entity name, not the table name.username
is the entity’s property name.
🔹 Benefits of using HQL:
✅ Avoids hardcoding table or column names → reduces risk of mismatches when database schema changes.
✅ Lets you write database-agnostic queries — Hibernate handles translating HQL into the SQL your RDBMS understands.
✅ Supports polymorphic queries (e.g., queries across entity hierarchies).
🔹 Example with join:
String hql = "SELECT o FROM Order o JOIN o.customer c WHERE c.name = :name";
List<Order> orders = session.createQuery(hql, Order.class)
.setParameter("name", "Alice")
.list();
HQL is Hibernate’s powerful, entity-based query language, letting you write object-oriented, database-independent queries that operate on your mapped domain model.