HQL: удаление данных (Delete)
Last updated: 11 мая 2025 г.Если извлечь строку таблицы в объект, а потом применить метод delete
на этот объект, то строка, которую мы извлекали удалиться в базе данных. Таким образом с помощью метода delete
можно удалять одну строку таблицы.
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 try {
18 //Delete одной строки таблицы с помощью delete
19 session = sessionfactory.getCurrentSession();
20 session.beginTransaction();
21 //Извлекаем строку с ключем 2 в объект Book
22 Book Hobbitbook = session.get(Book.class, 2);
23 //С помощью delete удаляем строку с ключем 2
24 //из таблицы через объект Hobbitbook.
25 session.delete(Hobbitbook);
26 //Извлекаем все книги в таблице
27 List<Book> books = session.createQuery(
28 "from Book").getResultList();
29 session.getTransaction().commit();
30 //выведем их
31 showBooks(books);
32 }
33 catch (Exception e) {
34 //откатываем изменения в бд
35 //если при транзакции случилась ошибка
36 session.getTransaction().rollback();
37 e.printStackTrace();
38 }
39 finally{
40 //по окончании работы с сессией закрываем ее
41 session.close();
42 }
43 }
44
45 private static void showBooks(List<Book> books) {
46 for(Book tempBook : books) {
47 System.out.println(tempBook.toString());
48 }
49 }
50}
Давайте запустим нашу программу.

Видим, что в таблице осталась одна строка, строку с ключом 2 мы успешно удалили.
Delete с помощью запроса
Также можно удалять строки таблицы запросом. Благодаря чему мы можем удалять сразу несколько строк таблицы одним запросом.
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 Session session = sessionfactory.getCurrentSession();
16 try {
17 //Delete нескольких строк таблицы запросом.
18 session = sessionfactory.getCurrentSession();
19 session.beginTransaction();
20 //Добавим еще одну книгу в таблицу
21 session.save(new Book("LOTR"));
22 //Удаляем строки с id равными 1 и 3.
23 //То есть ту которая была в таблице и
24 //новую добавленную.
25 session.createQuery("delete from Book where id=1″
26 +" or id=3″).executeUpdate();
27 //Извлечем все книги в таблице
28 List<Book> books = session.createQuery(
29 "from Book").getResultList();
30 session.getTransaction().commit();
31 //проверим содержимое books
32 showBooks(books);
33 }
34 catch (Exception e) {
35 //откатываем изменения в бд
36 //если при транзакции случилась ошибка
37 session.getTransaction().rollback();
38 e.printStackTrace();
39 }
40 finally{
41 //по окончанию работы с сессией закрываем ее
42 session.close();
43 }
44 }
45
46 private static void showBooks(List<Book> books) {
47 for(Book tempBook : books) {
48 System.out.println(tempBook.toString());
49 }
50 }
51}
Давайте запустим нашу программу.

Как видим, результатом select запроса оказался пустой список, раз ничего не вывелось в конце. Значит обе строки таблицы были удалены успешно.
Следующие уроки
Настройка связей в Hibernate приложении
21
мин.
Двусторонняя связь между сущностями в Hibernate
20
мин.
Настройка связи Один-ко-Многим в Hibernate
20
мин.