Массовое удаление HQL с помощью внутреннего запроса
Можно ли выполнить массовое удаление hibernate с помощью внутреннего запроса? Пример:
DELETE Person person WHERE person.id IN (SELECT id FROM...)
1 ответ:
Да. Это вполне возможно. См. пункты ниже.
Hibernate предоставляет методы для массового выполнения инструкций DML в стиле SQL, которые выполняются с помощью языка запросов Hibernate (HQL).
Псевдо-синтаксис для операторов
UPDATE
иDELETE
таков:( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)
Некоторые моменты, чтобы отметить:
- в предложении from ключевое слово FROM является необязательным
- в предложении from может быть названа только одна сущность. Однако его можно изменить на псевдоним. Если имя сущности является aliased, то любые ссылки на свойства должны быть квалифицированы с использованием этого псевдонима. Если имя сущности не имеет псевдонима, то это незаконно для любых ссылок на свойства, чтобы быть квалифицированным.
- никакие соединения, явные или неявные, не могут быть указаны в массовом запросе HQL. Подзапросы можно использовать в предложении where, где сами подзапросы могут содержать соединения.
- предложение where также является необязательным.
Ссылки