#spring #database #hibernate #single-page-application
#весна #База данных #спящий режим #одностраничное приложение
Вопрос:
Как я могу обновить таблицу, условие которой ссылается на другую таблицу в spring jpa? У меня есть табличная задача, которая связана с TaskProgress (многие к одному). И TaskProgress имеет некоторое значение, например: CREATE, INPROGRES, DONE, ARCHIVED, … Вот мой запрос в репозитории:
@Modifying
@Query("UPDATE Task t SET t.responsibleUser = null WHERE t.responsibleUser.id = :userId "
"AND t.deleted = false AND t.taskProgress.name <> 'ARCHIVED'")
void removeResponsibleUserId(UUID userId);
Но я получил сообщение об ошибке:
Hibernate: update task cross join set responsible_user_id=null where responsible_user_id=? and deleted=0 and name<>'ARCHIVED'
2020-11-25 00:38:51 - SQL Error: 1064, SQLState: 42000
2020-11-25 00:38:51 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'set responsible_user_id=null where responsible_user_id=x'152B59C33A0035003500000' at line 1
Ответ №1:
Используйте предикат exists, подобный этому:
@Modifying
@Query("UPDATE Task t SET t.responsibleUser = null WHERE t.responsibleUser.id = :userId "
"AND t.deleted = false AND NOT EXISTS (SELECT 1 FROM t.taskProgress p WHERE p.name = 'ARCHIVED')")
void removeResponsibleUserId(UUID userId);