Подтвердить что ты не робот

"Не поддерживается для операций 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.

4b9b3361

Ответ 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);

Для получения дополнительной информации используйте этот ответ.