Что такое HQL в Hibernate?

«Что такое HQL в Hibernate?» — вопрос из категории Hibernate, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

HQL (Hibernate Query Language) — это объектно-ориентированный язык запросов в Hibernate, который оперирует сущностями и их свойствами, а не таблицами и столбцами базы данных.

Ключевые особенности:

  • Объектная модель: Работает с классами Java (Employee) и их связями (department.name).
  • Полиморфизм: Поддерживает запросы по иерархии наследования.
  • Независимость от БД: HQL компилируется в SQL, специфичный для используемой СУБД.
  • Безопасность: Поддерживает параметризацию для предотвращения SQL-инъекций.

Пример запроса с параметром:

String hql = "FROM Employee e WHERE e.department.name = :deptName AND e.salary > :minSalary";
Query<Employee> query = session.createQuery(hql, Employee.class);
query.setParameter("deptName", "Engineering");
query.setParameter("minSalary", 50000);
List<Employee> employees = query.list();

Типы запросов:

  1. Выборка объектов: FROM Entity возвращает управляемые сущности.
  2. Проекция: SELECT e.name, e.email FROM Entity e возвращает массивы объектов или DTO.
  3. Агрегатные функции: SELECT COUNT(e), AVG(e.salary) FROM Entity e.

Почему использовать HQL? Он абстрагирует разработчика от деталей SQL, делает код более читаемым и упрощает рефакторинг при изменении схемы БД.