MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

TransactionRequiredException Exécution d'une requête de mise à jour/suppression

Je ne sais pas si cela aidera votre situation (c'est-à-dire si elle existe toujours), cependant, après avoir parcouru le Web pour un problème similaire.

Je créais une requête native à partir d'un EntityManager de persistance pour effectuer une mise à jour.

Query query = entityManager.createNativeQuery(queryString);

Je recevais l'erreur suivante :

causé par :javax.persistence.TransactionRequiredException :exécution d'une requête de mise à jour/suppression

De nombreuses solutions suggèrent d'ajouter @Transactional à votre méthode. Le simple fait de le faire n'a pas modifié l'erreur.

Certaines solutions suggèrent de demander à EntityManager une EntityTransaction afin que vous puissiez appeler begin et vous engager. Cela génère une autre erreur :

causé par :java.lang.IllegalStateException :non autorisé à créer une transaction sur EntityManager partagé - utilisez plutôt les transactions Spring ou EJBCMT

J'ai ensuite essayé une méthode qui, selon la plupart des sites, est destinée aux gestionnaires d'entités gérées par l'application et non à la gestion des conteneurs (ce que je pense que Spring est) et c'était joinTransaction() .

Avoir @Transactional décorer la méthode puis appeler joinTransaction() sur l'objet EntityManager juste avant d'appeler query.executeUpdate() et ma mise à jour de la requête native a fonctionné.

J'espère que cela aidera quelqu'un d'autre qui rencontre ce problème.