HQL запросы в Hibernate. Удаление данных (Delete)

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

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 { //Delete одной строки таблицы с помощью delete session = sessionfactory.getCurrentSession(); session.beginTransaction(); //Извлекаем строку с ключем 2 в объект Book Book Hobbitbook = session.get(Book.class, 2); //С помощью delete удаляем строку с ключем 2 //из таблицы через объект Hobbitbook. session.delete(Hobbitbook); //Извлекаем все книги в таблице List books = session.createQuery( “from Book”).getResultList(); session.getTransaction().commit(); //выведем их showBooks(books); } 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()); } } }

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

Видим, что в таблице осталась одна строка, строку с ключом 2 мы успешно удалили.


Delete с помощью запроса

Также можно удалять строки таблицы запросом. Благодаря чему мы можем удалять сразу несколько строк таблицы одним запросом.

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 { //Delete нескольких строк таблицы запросом. session = sessionfactory.getCurrentSession(); session.beginTransaction(); //Добавим еще одну книгу в таблицу session.save(new Book(“LOTR”)); //Удаляем строки с id равными 1 и 3. //То есть ту которая была в таблице и //новую добавленную. session.createQuery(“delete from Book where id=1″ +” or id=3″).executeUpdate(); //Извлечем все книги в таблице List books = session.createQuery( “from Book”).getResultList(); session.getTransaction().commit(); //проверим содержимое books showBooks(books); } 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()); } } }

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

Как видим, результатом select запроса оказался пустой список, раз ничего не вывелось в конце. Значит обе строки таблицы были удалены успешно.

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

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

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

Реализуйте двустороннюю связь между сущностями в Hibernate. Узнайте, как настроить взаимодействие между объектами с помощью аннотаций @OneToOne и mappedBy.
Time to read: 20

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

Настройте связь Один-ко-Многим в Hibernate с помощью @OneToMany. Узнайте, как работать с каскадными операциями и управлять связанными сущностями в Java приложениях.
Time to read: 20