Бесплатный курс по Java: от основ до продвинутого уровня
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 с помощью @OneToMany. Узнайте, как работать с каскадными операциями и управлять связанными сущностями в Java приложениях.