Ответ
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();
Типы запросов:
- Выборка объектов:
FROM Entityвозвращает управляемые сущности. - Проекция:
SELECT e.name, e.email FROM Entity eвозвращает массивы объектов или DTO. - Агрегатные функции:
SELECT COUNT(e), AVG(e.salary) FROM Entity e.
Почему использовать HQL? Он абстрагирует разработчика от деталей SQL, делает код более читаемым и упрощает рефакторинг при изменении схемы БД.