ただし、同様の問題についてWebを精査した後、これが状況に役立つかどうか(つまり、まだ存在するかどうか)はわかりません。
更新を実行するために、永続性EntityManagerからネイティブクエリを作成していました。
Query query = entityManager.createNativeQuery(queryString);
次のエラーが発生しました:
原因:javax.persistence.TransactionRequiredException:更新/削除クエリの実行
多くのソリューションでは、メソッドに@Transactionalを追加することを提案しています。これを実行しても、エラーは変わりませんでした。
一部のソリューションでは、EntityManagerにEntityTransaction
を要求することを提案しています。 beginを呼び出して自分でコミットできるようにします。これにより、別のエラーがスローされます:
原因:java.lang.IllegalStateException:共有EntityManagerでトランザクションを作成することは許可されていません-代わりにSpringトランザクションまたはEJBCMTを使用してください
次に、ほとんどのサイトがアプリケーション管理のエンティティマネージャーを使用するためのものであり、コンテナー管理を使用するためのものではないと言う方法を試しました(Springはそうだと思います)。これはjoinTransaction()
でした。 。
@Transactional
がある メソッドを装飾してからjoinTransaction()
を呼び出す query.executeUpdate()
を呼び出す直前のEntityManagerオブジェクト ネイティブクエリの更新が機能しました。
これが、この問題を経験している他の誰かに役立つことを願っています。