Массовое удаление HQL с помощью внутреннего запроса


Можно ли выполнить массовое удаление hibernate с помощью внутреннего запроса? Пример:

DELETE Person person WHERE person.id IN (SELECT id FROM...)
1 2

1 ответ:

Да. Это вполне возможно. См. пункты ниже.

Hibernate предоставляет методы для массового выполнения инструкций DML в стиле SQL, которые выполняются с помощью языка запросов Hibernate (HQL).

Псевдо-синтаксис для операторов UPDATE и DELETE таков:

( UPDATE | DELETE ) FROM? EntityName (WHERE where_conditions)

Некоторые моменты, чтобы отметить:

  1. в предложении from ключевое слово FROM является необязательным
  2. в предложении from может быть названа только одна сущность. Однако его можно изменить на псевдоним. Если имя сущности является aliased, то любые ссылки на свойства должны быть квалифицированы с использованием этого псевдонима. Если имя сущности не имеет псевдонима, то это незаконно для любых ссылок на свойства, чтобы быть квалифицированным.
  3. никакие соединения, явные или неявные, не могут быть указаны в массовом запросе HQL. Подзапросы можно использовать в предложении where, где сами подзапросы могут содержать соединения.
  4. предложение where также является необязательным.

Ссылки