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.