![[8.5.5.6 以降]](../ng_v8556.gif)
Java Persistence API 2.1 の動作の変更
アプリケーションで jpa-2.0 フィーチャーを既に使用している場合、マイグレーションの問題を避けるために、既存のアプリケーションで引き続き jpa-2.0フィーチャーを使用することをお勧めします。新しいアプリケーションの場合は、jpa-2.1 フィーチャーを使用することをお勧めします。このフィーチャーにより、JPA 2.1 仕様で使用可能になった新しいフィーチャーを利用できます。jpa-2.0 フィーチャーではなく jpa-2.1 フィーチャーを使用するように既存のアプリケーションを変更する場合は、マイグレーション・プロセスでアプリケーションを調整する必要が生じることがあります。
jpa-2.0 と jpa-2.1 の差異
以下に示すように、認識しておく必要がある jpa-2.0 と jpa-2.1 フィーチャーの大きな差異がいくつかあります。
- PersistenceProvider クラス名
- jpa-2.0
- IBM® プロバイダー:com.ibm.websphere.persistence.PersistenceProviderImpl
- OpenJPA プロバイダー: org.apache.openjpa.persistence.PersistenceProviderImpl
- jpa-2.1
- org.eclipse.persistence.jpa.PersistenceProvider
- キャッシュの動作
-
jpa-2.0: デフォルトでは、キャッシュは無効になっています。 アプリケーションが L2 キャッシュを利用する必要がある場合は、明示的にそれを有効にする必要があります。
-
jpa-2.1: デフォルトでは、EclipseLink プロバイダーで L2 キャッシュと QueryCache が有効になっています。この設定がご使用のアプリケーションで最適なオプションなのかを確認する必要があります。クラスターなどの分散環境で実行している場合、キャッシュを無効にするか、ノードごとにデータが異なる可能性があることを理解している必要があります。
- 機能拡張/ウィービングの差異
-
jpa-2.0: OpenJPA では、エンティティーを拡張する必要があります。詳しくは、JPA エンティティーの機能拡張に関する資料を参照してください。
-
jpa-2.1: EclipseLink は、拡張されていないエンティティーで機能します。WebSphere Application Server では、静的機能拡張がサポートされます。
lazy ロードや一部のパフォーマンス向上など、一部のフィーチャーが使用できない場合があります。
- jpa-2.0 (OpenJPA) プロバイダーで使用するためにエンティティー・クラスが静的に拡張された場合、jpa-2.1 プロバイダーを使用する前にクラスを再コンパイルする必要があります。
- データ・ソース使用法の差異
-
jpa-2.0 フィーチャーは non-jta-datasource を控えめに使用するため、アプリケーションの調整時に non-jta-datasource 接続はほとんど必要ありません。
jpa-2.1 は、データの読み取り時に non-jta-datasource 接続を使用し、トランザクションはアクティブではありません。つまり、このフィーチャーを使用する際には、non-jta-datasource 接続プールを大きくする必要があります。
2 つの JPA プロバイダーのさらなる差異については、OpenJPA -> EclipseLink マイグレーション・ガイド・ページを参照してください。
OpenJPA で使用可能な JPA 2.1 フィーチャー
OpenJPA は、JPA 2.0 プロバイダーであり、新しい JPA 2.1 フィーチャーと同様に機能するフィーチャーを備えています。つまり、jpa-2.0 フィーチャーを使用している既存のアプリケーションがあり、JPA 2.1 新規フィーチャーの一部を使用する場合に、jpa-2.1 フィーチャーに切り替える必要はありません。 切り替えずに、OpenJPA によって提供されている、新規フィーチャーに相当するフィーチャーを使用できます。OpenJPA で使用可能な主要な JPA 2.1 フィーチャーの一部を以下に示します。
- スキーマの生成
-
このフィーチャーにより、DDL を生成したり、JPA エンティティー定義に基づいて表スキーマを定義するためにデータベースと直接対話したりできます。詳しくは、JPA 2.1 仕様のセクション 9.4 を参照してください。
OpenJPA の等価フィーチャー: スキーマ・マッパー
- エンティティー・グラフ
-
このフィーチャーにより、エンティティー・オブジェクトのグラフのフェッチまたは処理を指定できます。詳しくは、JPA 2.1 仕様のセクション 3.7 を参照してください。
OpenJPA の等価フィーチャー: FetchPlan および FetchGroup
- ストアード・プロシージャー照会
このフィーチャーにより、データベースでストアード・プロシージャーを呼び出すことができます。詳しくは、JPA 2.1 仕様のセクション 3.10.17 を参照してください。
OpenJPA の等価フィーチャー: 照会呼び出し
- 基本属性型変換
-
このフィーチャーにより、基本型属性について、属性エンティティー表現とデータベース表現の間で変換することができます。詳しくは、JPA 2.1 仕様のセクション 3.8 を参照してください。
OpenJPA の等価フィーチャー: Externalizer フィーチャー
- @Index アノテーションおよび @ForeignKey アノテーション
-
JPA 2.1 仕様のセクション 11.1.19 および 11.1.23 を参照してください。
OpenJPA の等価フィーチャー: OpenJPA の @Index および @ForeignKey
- EntityManager、Cache のアンラップ・ユーティリティー・メソッド
-
JPA 2.1 仕様のセクション 3.1.1 および 7.10 を参照してください。
OpenJPA の等価フィーチャー: EntityManagerImpl.unwrap()および OpenJPAPersistence.cast()
- ネイティブ SQL からの結果のマップ時におけるオブジェクト作成
-
JPA 2.1 仕様のセクション 3.10.16.2.2 を参照してください。
OpenJPA の等価フィーチャー: ResultShape オブジェクト