web-dev-qa-db-fra.com

"Non pris en charge pour les opérations DML" avec une simple requête UPDATE

Je reçois l'erreur Not supported for DML operations lorsque j'utilise le HQL suivant ...

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

Quelle pourrait être la cause du problème? Cela ne semble pas être une erreur courante compte tenu des quelques résultats que j'ai trouvés dans Google.

33
Webnet

Vérifiez la publication hibernate hql ERROR: Not supported for DML operations in the hibernate users forum.

Vous avez probablement appelé

querySt.list();

pour votre requête UPDATE. Au lieu de cela, vous devez appeler

querySt.executeUpdate();
38
Ajay Bhojak

J'avais aussi le même problème avec les annotations. Après avoir cherché et fait quelques astuces, j'ai pu le résoudre. Il y a quelques étapes ci-dessous que vous devez vérifier lors de l'utilisation de l'opération DML avec JPA.

  1. Utilisez une annotation @Modifying (org.springframework.data.jpa.repository.Modifying) et @Transactional (org.springframework.transaction.annotation.Transactional) sur la méthode requise.

  2. Utilisez void comme type de méthode de retour.

par exemple:-

@Modifier

@Query ("UPDATE ProcedureDTO o SET o.isSelectedByUser =? 1")

@Transactional

public void getListOfProcedureBasedOnSelection (Boolean isSelected);

1
Saurabh

Assurez-vous que votre méthode de classe de service qui appelle updateLastActivity a l'annotation @Transactional(org.springframework.transaction.annotation.Transactional). et modifiez la méthode du référentiel ci-dessous,

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);

Pour plus d'informations, veuillez utiliser cette réponse .

0
tk_

La même chose m'est arrivée car, étant q un objet de la classe Query, q.list () ne doit pas être utilisé pour les mises à jour ou les suppressions, mais q.executeUpdate ()

0
Weslor