Não tenho certeza se isso ajudará sua situação (ou seja, se ainda existir), no entanto, depois de vasculhar a web em busca de um problema semelhante.
Eu estava criando uma consulta nativa de um EntityManager de persistência para realizar uma atualização.
Query query = entityManager.createNativeQuery(queryString);
Eu estava recebendo o seguinte erro:
causado por:javax.persistence.TransactionRequiredException:Executando uma consulta de atualização/exclusão
Muitas soluções sugerem adicionar @Transactional ao seu método. Apenas fazer isso não alterou o erro.
Algumas soluções sugerem solicitar ao EntityManager uma
EntityTransaction
para que você possa chamar begin e commit. Isso gera outro erro:
causado por:java.lang.IllegalStateException:Não é permitido criartransação no EntityManager compartilhado - use transações Spring ou EJBCMT em vez disso
Eu então tentei um método que a maioria dos sites diz ser para usar gerenciadores de entidade gerenciados por aplicativo e não gerenciados por contêiner (o que acredito que o Spring seja) e isso foi
joinTransaction()
. Ter
@Transactional
decorando o método e chamando joinTransaction()
no objeto EntityManager antes de chamar query.executeUpdate()
e minha atualização de consulta nativa funcionou. Espero que isso ajude alguém com esse problema.