Топ-100HQL: удаление данных (Delete) - CodOrbits
LogoCodOrbits

Раздел: Hibernate

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

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

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=126                +" 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
мин.

Similar Articles Icon
Divider

Двусторонняя связь между сущностями в Hibernate

20
мин.

Similar Articles Icon
Divider

Настройка связи Один-ко-Многим в Hibernate

20
мин.

Similar Articles Icon