Estoy recibiendo el error Not supported for DML operations cuando yo uso la siguiente HQL…

@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);

Lo que podría estar causando el problema? No parece ser un error común dados los escasos resultados que he encontrado en Google.

  • Completa stacktrace?
  • ¿puede usted proporcionar el código de la lista completa y el seguimiento de la pila.
  • Mira la solución aceptada para este stackoverflow.com/a/12426144/172306 es similar.
  • +1 para el «@Modificar» (de su propio comentario en la respuesta de Ajay Bhojak) debe añadir esto como la respuesta por defecto, ya que esto es supuestamente un spring JPA Repositorio pregunta, que dudaban de
InformationsquelleAutor Webnet | 2013-07-12

4 Comentarios

  1. 38

    Compruebe el post hibernate hql ERROR: No se admite para las operaciones de DML en la hibernación de los usuarios del foro.

    Más probable es que usted llama

    querySt.list();

    para su UPDATE consulta. En lugar usted debe llamar a

    querySt.executeUpdate();
    • Necesitaba @Modifying – gracias!!
    • Acabo de resolver el mismo problema mediante la adición de la Modificación de la anotación. Uno más de sugerencia: la función de devolución debe ser de tipo void, porque he copiado la función normal función de consulta por lo que el retorno fue de tipo Lista<SomeModelClass>, entonces tengo el mismo error, incluso después he añadido la Modificación de anotación.
    • tenía el mismo problema, copiar y pegar tenía el tipo de retorno como la Lista de<T> en lugar de vacío
  2. 1

    Yo también tenía el mismo problema con anotaciones.Después de buscar y hacer algunos trucos que yo era capaz de resolverlo.
    Hay algunos pasos que usted necesita para comprobar mientras que el uso de la operación DML con JPA.

    1. El uso de la anotación
      @Modificación(org.springframework.de datos.jpa.repositorio.Modificar) y @Transactional(org.springframework.transacción.la anotación.Transaccional) en el método requerido.

    2. Vacío como tipo de retorno del método.

    e.g:-

    @Modificar

    @Query(«ACTUALIZACIÓN de ProcedureDTO o’o.isSelectedByUser =?1»)

    @Transactional

    public void getListOfProcedureBasedOnSelection(Boolean isSelected);

  3. 0

    El mismo me pasó a mí porque, siendo q un objeto de la clase de Consulta, q.lista() no es para ser utilizado para las actualizaciones o eliminaciones, pero q.executeUpdate()

  4. 0

    Asegúrese de que su servicio de método de clase que llama a updateLastActivity ha @Transactional(org.springframework.transaction.annotation.Transactional) anotación. y modificar el repositorio método 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 por favor utilice esta respuesta.

Dejar respuesta

Please enter your comment!
Please enter your name here