У меня в HQL есть следующий запрос:
update ProjectFile pf1
set pf1.validUntil.id =123
where pf1 = (
select pf from ProjectVersion pv, ProjectFile as pf
where pf.validFrom.sequence <= pv.sequence
and pf.validUntil.sequence >= pv.sequence
and pf.state <> 12
and pf.projectVersion.project.id = 1
and pv.project.id = 1
and pv.id = 12
and pf.id not in (2,3,4)
)
Hibernate правильно анализирует запрос и генерирует SQL, но база данных (MySQL) выдает ошибку:
You can't specify target table 'ProjectFile' for update in FROM clause
Проблема, похоже, в том, что обновляемая таблица запрашивается в том же контексте. Есть ли способ переписать запрос HQL для создания SQL, который можно правильно выполнить в MySQL? Другой подход - создать промежуточную таблицу, чего я и стараюсь избегать.






Я столкнулся с той же проблемой и разместил здесь вопрос: MySQL / SQL: обновление с помощью коррелированного подзапроса из самой обновленной таблицы.
Чтобы решить вашу проблему, вам необходимо зарегистрироваться на уровне ОБНОВЛЕНИЯ, пожалуйста, посмотрите ответ на мой вопрос.
Это не решает проблемы, поскольку объединения нельзя использовать в HQL
update.