Ответ
Hibernate поддерживает несколько способов выполнения запросов:
- HQL (Hibernate Query Language) — объектно-ориентированный аналог SQL, работающий с сущностями и их свойствами.
- JPQL (Java Persistence Query Language) — стандартизированная версия HQL, часть спецификации JPA.
- Нативный SQL — позволяет выполнять прямые SQL-запросы к базе данных.
- Criteria API — типобезопасный, объектный способ построения запросов.
- Specification API (через JPA Criteria) — паттерн для удобного построения динамических запросов.
Пример HQL:
Query<Person> query = session.createQuery(
"FROM Person p WHERE p.age > :age", Person.class
);
query.setParameter("age", 18);
List<Person> results = query.getResultList();
Пример Criteria API:
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<Person> cq = cb.createQuery(Person.class);
Root<Person> root = cq.from(Person.class);
cq.select(root).where(cb.gt(root.get("age"), 18));
List<Person> results = session.createQuery(cq).getResultList();
Почему это важно: Разные подходы подходят для разных сценариев. HQL/JPQL удобны для статических запросов, Criteria API — для динамических и типобезопасных, а нативный SQL — для сложных, специфичных для СУБД операций.