Топ-100HQL: обновление данных (Update) - CodOrbits
LogoCodOrbits

Раздел: Hibernate

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

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

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

Last updated: 11 мая 2025 г.

Если мы извлекли из таблицы строку в объект, а потом изменили его с помощью например сеттера, то после коммита транзакции он измениться и в базе.

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            session = sessionfactory.getCurrentSession();
18            session.beginTransaction();
19            //извлекаем строку с ключем 2 в объект Book
20            Book LOTRBook = session.get(Book.class, 2);
21            //меняем имя книги с помощью сеттера
22            LOTRBook.setBookName("Lord Of The Rings");
23            //и сразу коммитим. после этого строка
24            //таблицы с ключем 2 тоже должна измениться
25            session.getTransaction().commit();
26            //создаем новую сессию и транзакцию
27            session = sessionfactory.getCurrentSession();
28            session.beginTransaction();
29            //извлекаем еще раз
30            Book LOTRBook1 = session.get(Book.class, 2);
31            //выведем извлеченную книгу на консоль
32            System.out.println(LOTRBook1.toString());
33            session.getTransaction().commit();
34        } catch (Exception e) {
35            //откатываем изменения в бд
36            //если при транзакции случилась ошибка
37            session.getTransaction().rollback();
38            e.printStackTrace();
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 книги изменилось после первого коммита и в базе. То есть мы просто меняем объект, который мы предварительно извлекли из базы и после коммита он меняется и в базе.

Довольно удобно, в sql пришлось бы писать команду update


Update таблицы с помощью запроса

Также можно обновлять строки таблицы запросом. То есть нам, например, может понадобиться обновить несколько строк таблицы и не очень будет удобно доставать эти строки, помещать их в объекты изменять их, а потом коммитить, чтобы они изменились в базе, как в прошлом примере. Проще сделать один запрос.

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            //Update нескольких строк таблицы запросом.
18            session = sessionfactory.getCurrentSession();
19            session.beginTransaction();
20            // устанавливаем значение bookName равным Hobbit
21            // в строках таблицы где id равен 1 и 2
22            session.createQuery("update Book set bookName='" + 
23                "Hobbit’ where id=1 or id=2").executeUpdate();
24            //извлечем строки таблицы для проверки
25            List<Book> books3 = session.createQuery(
26                "from Book").getResultList();
27            session.getTransaction().commit();
28            //проверим содержимое books3
29            showBooks(books3);
30        }
31        catch (Exception e) {
32            //откатываем изменения в бд
33            //если при транзакции случилась ошибка
34            session.getTransaction().rollback();
35            e.printStackTrace();
36        }
37        finally {
38            //по окончании работы с сессией закрываем ее
39            session.close();
40        }
41    }
42
43    private static void showBooks(List<Book> books) {
44        for(Book tempBook : books) {
45            System.out.println(tempBook.toString());
46        }
47    }
48}

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

Как видим, обе строки таблицы были изменены успешно с помощью Update запроса.


Следующие уроки

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

16
мин.

Similar Articles Icon
Divider

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

21
мин.

Similar Articles Icon
Divider

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

20
мин.

Similar Articles Icon