Non sono sicuro se questo aiuterà la tua situazione (ovvero se esiste ancora), tuttavia, dopo aver setacciato il Web per un problema simile.
Stavo creando una query nativa da un EntityManager di persistenza per eseguire un aggiornamento.
Query query = entityManager.createNativeQuery(queryString);
Stavo ricevendo il seguente errore:
causato da:javax.persistence.TransactionRequiredException:esecuzione di una query di aggiornamento/eliminazione
Molte soluzioni suggeriscono di aggiungere @Transactional al tuo metodo. Il solo fatto di eseguire questa operazione non ha cambiato l'errore.
Alcune soluzioni suggeriscono di chiedere a EntityManager una EntityTransaction
in modo che tu possa chiamare start e impegnarti. Questo genera un altro errore:
causato da:java.lang.IllegalStateException:non è consentito creare transazioni su EntityManager condiviso - utilizzare invece transazioni Spring o EJBCMT
Ho quindi provato un metodo che la maggior parte dei siti dice sia per l'uso di gestori di entità gestiti dall'applicazione e non gestiti da container (che credo sia Spring) ed era joinTransaction()
.
Avere @Transactional
decorare il metodo e quindi chiamare joinTransaction()
sull'oggetto EntityManager appena prima di chiamare query.executeUpdate()
e il mio aggiornamento della query nativa ha funzionato.
Spero che questo aiuti qualcun altro a riscontrare questo problema.