Обзор языка запросов HQL в Hibernate

В hibernate используется HQL, а не SQL.

HQL работает с таблицей через класс, который связан с ней.

То есть в запросе к БД мы указываем не название таблицы, и ее аттрибутов, а название класса и его полей. Таким образом HQL является более объектно-ориентированным


Работа с HQL.

Давайте сделаем пару запросов на языке HQL.

В принципе он очень схож с SQL, поэтому трудностей для его понимания возникать не должно у тех кто знаком с SQL.

package HibernateApps; import java.util.List; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class HibernateApp { public static void main(String[] args) { SessionFactory sessionfactory = new Configuration() .configure(“hibernate.cfg.xml”) .addAnnotatedClass(Book.class) .buildSessionFactory(); Session session = sessionfactory.getCurrentSession(); try { session = sessionfactory.getCurrentSession(); session.beginTransaction(); // Добавим еще одну книгу в таблицу session.save(new Book(“LOTR”)); System.out.println(“--------------------”); // Ниже происходит запрос выборки данных // из таблицы books через класс Book. // Вместо select * from books будет просто // from Book (где Book – имя класса). List books = session.createQuery( “from Book”) .getResultList(); System.out.println(“--------------------”); // Извлечем теперь две конкретных книжки // для демонстрации умного ключевого выражения. // Здесь bookName — поле класса, вместо атрибута // name таблицы. // Как видим, язык во многом похож на SQL List books2 = session.createQuery( “from Book b where ” + “b.bookName=’Harry Potter’ ” + “or b.bookName=’LOTR'”) .getResultList(); System.out.println(“---------------------“); session.getTransaction().commit(); // Проверим содержимое списков books и books2, // в которых хранятся результаты запросов. // Для этого создана функция showBooks ниже. // Она просто проходит циклом по List. showBooks(books); System.out.println(“---------------------“); showBooks(books2); } catch (Exception e) { // Откатываем изменения в БД, // если при транзакции случилась ошибка session.getTransaction().rollback(); e.printStackTrace(); } finally { // По окончании работы с сессией закрываем ее session.close(); } } private static void showBooks(List books) { for (Book tempBook : books) { System.out.println(tempBook.toString()); } } }

Проверка работы Hibernate приложения.

Давайте запустим нашу программу.

Как видим, произошло три запроса. Один добавляет книгу в таблицу, Другие два производят выборку книг из таблицы.

Как видим, результаты запросов выборки были успешны. Первый запрос на выборку всех книг выбрал все книги и второй запрос на выборку двух конкретных книг выбрал эти две книги.

HQL: обновление данных (Update)

Обновление данных в Hibernate через изменение объектов и HQL-запросы. Примеры работы с методами update и executeUpdate для модификации записей.
Time to read: 16

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

Удаление данных в Hibernate: методы delete() и HQL-запросы. Практические примеры удаления как отдельных строк, так и групп записей из базы данных.
Time to read: 16

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

Узнайте, как настроить связи 1-к-1, 1-ко-многим и многие-ко-многим в Hibernate. Каскадные операции PERSIST и REMOVE для связанных сущностей с примерами кода.
Time to read: 20