Самостоятельные обновления в HQL

У меня в 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? Другой подход - создать промежуточную таблицу, чего я и стараюсь избегать.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
2
0
842
1

Ответы 1

Я столкнулся с той же проблемой и разместил здесь вопрос: MySQL / SQL: обновление с помощью коррелированного подзапроса из самой обновленной таблицы.

Чтобы решить вашу проблему, вам необходимо зарегистрироваться на уровне ОБНОВЛЕНИЯ, пожалуйста, посмотрите ответ на мой вопрос.

Это не решает проблемы, поскольку объединения нельзя использовать в HQL update.

v.ladynev 27.02.2017 02:01

Другие вопросы по теме