Как уже обсуждалось, автоматическое и прозрачное сопоставление объекта / реляции связано с управлением состоянием объекта.Состояние объекта доступно в памяти.Это означает, что манипулирование данными непосредственно в базе данных (с использованием языка манипулирования данными SQL (DML) операторов: INSERT, UPDATE, DELETE) не повлияет на состояние в памяти.Однако Hibernate предоставляет методы для массового выполнения операторов DML в стиле SQL, которые выполняются с помощью языка запросов Hibernate (HQL).
Псевдосинтаксис для операторов UPDATE и DELETE: ( UPDATE | DELETE )
FROM? EntityName (WHERE where_conditions)?
.
Некоторые моменты, на которые следует обратить внимание:
- В предложении from ключевое слово FROM является необязательным
- В предложении from может быть только одна сущность.Однако он может быть псевдонимом.Если имя объекта является псевдонимом, то любые ссылки на свойства должны быть уточнены с использованием этого псевдонима.Если имя сущности не является псевдонимом, то любые ссылки на свойства недопустимы.
- Нет объединений , неявных или явных, может быть указано в массовом запросе HQL.Подзапросы могут использоваться в предложении where, где сами подзапросы могут содержать объединения.
- Предложение where также необязательно.
(...)
Чтобы выполнить HQL DELETE, используйте тот же метод Query.executeUpdate()
:
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction();
String hqlDelete = "delete Customer c where c.name = :oldName";
// or String hqlDelete = "delete Customer where name = :oldName";
int deletedEntities = s.createQuery( hqlDelete )
.setString( "oldName", oldName )
.executeUpdate();
tx.commit();
session.close();
Значение int, возвращаемое *Метод 1033 * указывает количество объектов, на которые воздействует операция.Это может или не может соотноситься с количеством строк в базе данных.Массовая операция HQL может привести к выполнению нескольких реальных операторов SQL (например, для присоединенного подкласса).Возвращенное число указывает на количество реальных объектов, затронутых оператором.Возвращаясь к примеру объединенного подкласса, удаление из одного из подклассов может фактически привести к удалению не только таблицы, в которую отображается этот подкласс, но также корневой таблицы и таблиц потенциально присоединенного подкласса ниже поиерархия наследования.