次のコードは、エンティティを永続化するたびに実行されます。物事はうまくいっているようですが、それがどのように機能するのか理解できません!
EntityManager em = getEntityManager();
EntityTransaction userTransaction = em.getTransaction();
userTransaction.begin();
em.persist( ent );
userTransaction.commit();
上記の EntityManager は、アプリケーション全体で共有される単一のインスタンスです。取引開始後 私は em.persist(entity). とだけ言っています。どのトランザクションに属しているかを休止状態はどのように認識しますか!
アプリケーションに 10 人の同時ユーザーがいて、10 個のスレッドすべてが上記のコードを実行しているとします。したがって、10 個の独立したトランザクションが作成され、コミットされます。ただし、10 の異なるエンティティすべてをそれぞれのトランザクションに関連付けているわけではありません。では、JPAはどのようにそれを解決できますか!
回答に基づく; 以下があります。スレッドごとに EntityManager インスタンスが必要だと言っているのですか? それはサーバー上での殺害ではありませんか! これらのインスタンスをプールする必要がありますか? ある種の Connection Pooling を再度実装するのと同じではないでしょうか?