java - modificar - "No compatible con operaciones DML" con una simple consulta de ACTUALIZACIÓN
modificar datos en java netbeans (4)
Recibo el error Not supported for DML operations
cuando uso el siguiente HQL ...
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);
¿Qué podría estar causando el problema? No parece ser un error común dados los pocos resultados que he encontrado en Google.
Asegúrese de que su método de clase de servicio que llama a updateLastActivity
tenga la @Transactional(org.springframework.transaction.annotation.Transactional)
. y modifique el método del repositorio a continuación,
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);
Para obtener más información, utiliza esta respuesta .
Me pasó lo mismo porque, siendo q un objeto de la clase Query, q.list () no debe usarse para actualizaciones o eliminaciones, pero q.executeUpdate ()
También estaba teniendo el mismo problema con las anotaciones. Después de buscar y hacer algunos trucos, pude resolverlo. Hay algunos pasos a continuación que debe verificar al usar la operación DML con JPA.
Use la anotación @Modifying (org.springframework.data.jpa.repository.Modifying) y @Transactional (org.springframework.transaction.annotation.Transactional) en el método requerido.
Use void como método de devolución del método.
p.ej:-
@Modifying
@Query ("UPDATE ProcedureDTO o SET o.isSelectedByUser =? 1")
@Transactional
public void getListOfProcedureBasedOnSelection (Boolean isSelected);
Verifique la publicación hibernate hql ERROR: No compatible con operaciones DML en el foro de usuarios de hibernación.
Lo más probable es que hayas llamado
querySt.list();
para su consulta de UPDATE
. En cambio, debes llamar
querySt.executeUpdate();