Jag är inte säker på om detta kommer att hjälpa din situation (det vill säga om den fortfarande existerar), men efter att ha letat igenom webben efter ett liknande problem.
Jag skapade en inbyggd fråga från en persistens EntityManager för att utföra en uppdatering.
Query query = entityManager.createNativeQuery(queryString);
Jag fick följande felmeddelande:
orsakad av:javax.persistence.TransactionRequiredException:Utför en uppdaterings-/raderingsfråga
Många lösningar föreslår att du lägger till @Transactional till din metod. Bara att göra detta ändrade inte felet.
Vissa lösningar föreslår att du ber EntityManager om en EntityTransaction
så att du kan börja ringa och begå dig själv. Detta ger ett annat fel:
orsakad av:java.lang.IllegalStateException:Inte tillåtet att skapa transaktioner på delad EntityManager - använd Spring-transaktioner eller EJBCMT istället
Jag försökte sedan en metod som de flesta sajter säger är för användning av programhanterade enhetshanterare och inte containerhanterade (vilket jag tror Spring är) och det var joinTransaction()
.
Har @Transactional
dekorera metoden och sedan anropa joinTransaction()
på EntityManager-objektet precis innan query.executeUpdate()
anropas och min inbyggda frågeuppdatering fungerade.
Jag hoppas att detta hjälper någon annan som har det här problemet.