しかし、私は自分が何を担当しているのかわかりません。クエリを送信した後、接続を閉じる必要がありますか? または、EclipseLinkもこの接続を内部で使用しているため、接続を閉じることはできません。
適切で有効な質問です。unwrap()
ドキュメントには呼び出しのセマンティクスが欠けているようです。
EclipseLink に関して、私がソースから得たものによると:
EclipseLink は、現在アクティブなクライアント セッション トランザクションに使用する、現在アクティブな への参照を提供します。アクティブなトランザクションがない場合、新しい が作成され、セッションに関連付けられ、メソッドから返されます。connection
unwrap()
結果として、IMHO、そのような取得のコミット/ロールバックは、Connection
未定義の動作や例外につながる可能性があります。変更されたレコードが eclipselink 内部キャッシュによって以前にキャッシュされた DML の実行、または管理対象エンティティーが存在する DML の実行についても同様です。
したがって、この API を使用する場合、特に基になるトランザクションがダーティである場合は注意してください。
内部の eclipselink クラスを参照できる場合は、eclipselink の内部接続プールにアクセスしてConnection
排他的に取得できます ( を参照してくださいorg.eclipse.persistence.sessions.server.ServerSession.getConnectionPool(String)
)。