7

呼び出した場合、接続はJPAアプリケーションの接続プールにのみ返されますか?

entityManager.close();

エンティティマネージャーをサポートする接続は、そのライフサイクル中に変更できますか?

よろしくお願いしますmojoo

4

2 に答える 2

5

JPA仕様では、そのようなことや、接続を管理するための実装までは定義されていません。トランザクションがアクティブな場合、明らかな理由から、コミットするまで接続は同じであると考えるのが安全です。txnが終了すると、それは返されるか、実装に応じて保持される可能性があります(そしてあなたはあなたのことを言及しません)

于 2012-12-04T16:21:36.300 に答える
2

これは、JPAの実装と構成によって異なります。

EclipseLinkでは、デフォルトでは、接続はアクティブな(ダーティな)トランザクションの間のみ保持されます。つまり、最初の変更またはロックから、コミットまたはロールバックまで。非トランザクションクエリの場合、接続はオンデマンドで取得され、クエリの実行後に返されます。これにより、接続プールを最大限に活用できます。したがって、通常、em.close()は何もしません。

これは、「eclipselink.jdbc.exclusive-connection.mode」永続性ユニットのプロパティを使用して構成できます。「Always」は、EntityManagerの存続期間中接続を保持します。

非トランザクション読み取りとは異なり、トランザクションに異なる接続プールを使用することもできます。これは、JTA以外のデータソースを読み取りに使用できるため、JTAで役立ちます。

于 2012-12-05T14:19:25.767 に答える