Обзор языка запросов HQL в Hibernate
Last updated: 11 мая 2025 г.В hibernate используется HQL
, а не SQL.
HQL работает с таблицей через класс, который связан с ней.
То есть в запросе к БД мы указываем не название таблицы, и ее аттрибутов, а название класса и его полей. Таким образом HQL является более объектно-ориентированным
Работа с HQL.
Давайте сделаем пару запросов на языке HQL
.
В принципе он очень схож с SQL, поэтому трудностей для его понимания возникать не должно у тех кто знаком с SQL.
1package HibernateApps;
2
3import java.util.List;
4import org.hibernate.Session;
5import org.hibernate.SessionFactory;
6import org.hibernate.cfg.Configuration;
7
8public class HibernateApp {
9
10 public static void main(String[] args) {
11 SessionFactory sessionfactory = new Configuration()
12 .configure("hibernate.cfg.xml")
13 .addAnnotatedClass(Book.class)
14 .buildSessionFactory();
15
16 Session session = sessionfactory.getCurrentSession();
17
18 try {
19 session = sessionfactory.getCurrentSession();
20 session.beginTransaction();
21
22 // Добавим еще одну книгу в таблицу
23 session.save(new Book("LOTR"));
24 System.out.println("--------------------");
25
26 // Ниже происходит запрос выборки данных
27 // из таблицы books через класс Book.
28 // Вместо select * from books будет просто
29 // from Book (где Book – имя класса).
30 List<Book> books = session.createQuery(
31 "from Book")
32 .getResultList();
33 System.out.println("--------------------");
34
35 // Извлечем теперь две конкретных книжки
36 // для демонстрации умного ключевого выражения.
37 // Здесь bookName — поле класса, вместо атрибута
38 // name таблицы.
39 // Как видим, язык во многом похож на SQL
40 List<Book> books2 = session.createQuery(
41 "from Book b where " +
42 "b.bookName=’Harry Potter’ " +
43 "or b.bookName=’LOTR'")
44 .getResultList();
45 System.out.println("---------------------");
46
47 session.getTransaction().commit();
48
49 // Проверим содержимое списков books и books2,
50 // в которых хранятся результаты запросов.
51 // Для этого создана функция showBooks ниже.
52 // Она просто проходит циклом по List.
53 showBooks(books);
54 System.out.println("---------------------");
55 showBooks(books2);
56 } catch (Exception e) {
57 // Откатываем изменения в БД,
58 // если при транзакции случилась ошибка
59 session.getTransaction().rollback();
60 e.printStackTrace();
61 } finally {
62 // По окончании работы с сессией закрываем ее
63 session.close();
64 }
65 }
66
67 private static void showBooks(List<Book> books) {
68 for (Book tempBook : books) {
69 System.out.println(tempBook.toString());
70 }
71 }
72}
Проверка работы Hibernate приложения.
Давайте запустим нашу программу.

Как видим, произошло три запроса. Один добавляет книгу в таблицу, Другие два производят выборку книг из таблицы.
Как видим, результаты запросов выборки были успешны. Первый запрос на выборку всех книг выбрал все книги и второй запрос на выборку двух конкретных книг выбрал эти две книги.
Следующие уроки
HQL: обновление данных (Update)
16
мин.
HQL: удаление данных (Delete)
16
мин.
Настройка связей в Hibernate приложении
20
мин.