Топ-100Обзор языка запросов HQL в Hibernate
LogoCodOrbits

Раздел: Hibernate

Познакомьтесь с Hibernate — ORM-фреймворком Java для удобной работы с базами данных через объекты.

Все разделы
Иконка Hibernate

Обзор языка запросов 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
мин.

Similar Articles Icon
Divider

HQL: удаление данных (Delete)

16
мин.

Similar Articles Icon
Divider

Настройка связей в Hibernate приложении

20
мин.

Similar Articles Icon