Как использовать join в обновлении HQL? - PullRequest
3 голосов
/ 07 октября 2009

Я знаю, как объединять таблицы в обновлении SQL, но как мне это сделать в HQL?

Длинная история: у меня есть предметы, которые я обрабатываю в процессе. Каждый прогон в качестве идентификатора, и у меня есть отношение «многие ко многим» между элементами и прогонами (которое находится в дополнительной таблице).

Теперь я хочу установить состояние всех предметов, используемых в определенном прогоне. Наивный подход выглядит так:

update Items item
set item.statue = :done
where item.state = :new
  and :run in item.runs

Последняя строка не работает. Hibernate не может превратить сумку с пробегами во что-то, что можно использовать в предложении where. Какое решение?

1 Ответ

4 голосов
/ 07 октября 2009

Попробуйте изменить item.runs на элементы (item.runs) . Я не уверен, что это будет работать для обновления, потому что объединения в обновлениях HQL обычно должны быть выражены в подвыборке. Так что, если это не сработает, попробуйте что-то вроде:

update Items i1
set i1.statue = :done
where i1.state = :new
and i1 in (
  select i2
  from Items i2
  where :run in elements(i2.runs)
) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...