Ответ
Query в Hibernate — это объектное представление запроса к базе данных, позволяющее выполнять операции выборки, обновления или удаления, используя HQL, JPQL, SQL или Criteria API.
Основные типы запросов:
- HQL (Hibernate Query Language): Объектно-ориентированный язык, похожий на SQL, но работающий с сущностями и их полями.
Query<Person> query = session.createQuery( "FROM Person p WHERE p.age > :age", Person.class ); query.setParameter("age", 18); List<Person> adults = query.getResultList(); - JPQL (Java Persistence Query Language): Стандартизированная версия HQL, часть спецификации JPA.
- Native SQL: Прямое выполнение SQL-запросов с маппингом результата на сущности.
SQLQuery<Person> query = session.createSQLQuery( "SELECT * FROM person WHERE department_id = :deptId" ); query.addEntity(Person.class); query.setParameter("deptId", 5); List<Person> results = query.list(); - Criteria API: Типобезопасный, программный способ построения запросов.
CriteriaBuilder cb = session.getCriteriaBuilder(); CriteriaQuery<Person> cr = cb.createQuery(Person.class); Root<Person> root = cr.from(Person.class); cr.select(root).where(cb.gt(root.get("age"), 18)); Query<Person> query = session.createQuery(cr);
Ключевые методы интерфейса Query:
setParameter()— безопасная привязка параметров.getResultList()— возвращает список результатов.getSingleResult()— возвращает один результат (бросает исключение, если их нет или много).executeUpdate()— для операций UPDATE/DELETE.setMaxResults(),setFirstResult()— для пагинации.
Зачем использовать? Query абстрагирует SQL, обеспечивает переносимость между СУБД, защищает от SQL-инъекций и интегрируется с системой кэширования Hibernate.