"Не поддерживается для операций DML" с простым запросом UPDATE
Я получаю ошибку Not supported for DML operations
, когда использую следующий HQL...
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);
Что может быть причиной проблемы? Это не похоже на общую ошибку, учитывая несколько результатов, которые я нашел в Google.
Ответы
Ответ 1
Отметьте сообщение hibernate hql ERROR: не поддерживается для операций DML в форуме пользователей гибернации.
Скорее всего, вы назвали
querySt.list();
для вашего запроса UPDATE
. Вместо этого вы должны позвонить
querySt.executeUpdate();
Ответ 2
У меня также была такая же проблема с аннотациями. После поиска и выполнения некоторых трюков я смог ее решить.
Ниже приведены некоторые шаги, которые необходимо проверить при использовании операции DML с JPA.
-
Использовать anotation
@Modifying (org.springframework.data.jpa.repository.Modification) и @Transactional (org.springframework.transaction.annotation.Transactional) по требуемому методу.
-
Использовать void как возвращаемый тип метода.
например: -
@Modifying
@Query ( "UPDATE ProcedureDTO o SET o.isSelectedByUser =? 1" )
@Transactional
public void getListOfProcedureBasedOnSelection (Boolean isSelected);
Ответ 3
То же самое произошло со мной, поскольку q - объект класса Query, q.list() не должен использоваться для обновлений или удалений, но q.executeUpdate()
Ответ 4
Убедитесь, что метод класса обслуживания, который вызывает updateLastActivity
, имеет аннотацию @Transactional(org.springframework.transaction.annotation.Transactional)
. и измените метод репозитория ниже,
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
...
@Modifying
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);
Для получения дополнительной информации используйте этот ответ.