простой запрос в спящем режиме с объединением не работает - PullRequest
0 голосов
/ 23 января 2012

Я пытаюсь удалить некоторые BlRelation в моей базе данных, используя Hibernate.

К сожалению, запрос не работает.Не могли бы вы помочь мне в этом?Я знаю, это должно быть довольно просто ...

delete r FROM BlRelation where r.elementId.blProvider.providerId = 1

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 января 2012

Цитата из справочного руководства :

Псевдосинтаксис для операторов UPDATE и DELETE: (UPDATE | УДАЛИТЬ) ОТ? EntityName (ГДЕ где_условия)?.

Обратите внимание:

  • [...]
  • В массовом HQL-запросе нельзя указывать ни явные, ни явные объединения. Подзапросы могут использоваться в предложении where, где Сами подзапросы могут содержать объединения.

Вы можете просто использовать подзапрос или просто получить сущности в сеансе и использовать session.delete() для их удаления.

Вот подзапрос, который, вероятно, будет работать:

delete from BlRelation r where r.id in 
  (select r2.id from BlRelation r2 where r2.elementId.blProvider.providerId = 1)
1 голос
/ 23 января 2012

Пожалуйста, предоставьте более подробную информацию о вашем отображении, без него я только догадываюсь. Но попробуйте это:

delete FROM BlRelation where elementId.blProvider.providerId = 1

Также есть elementId поле типа BlProvider? Я предполагаю, что это названо element, таким образом, это должно было быть:

delete FROM BlRelation where element.blProvider.providerId = 1

Наконец, если element находится в один-ко-многим или много-ко-многим с BlProvider (это тип коллекции), вам понадобятся некоторые более сложный запрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...