![[8.5.5.6 以降]](../ng_v8556.gif)
Java Persistence API (JPA)
データ・パーシスタンスは、アプリケーションが不揮発性ストレージ・システムに情報を永続化してそこからその情報を取得する手段です。エンタープライズ・アプリケーションでは、リレーショナル・データベースにアクセスする必要があるため、パーシスタンスは必要不可欠です。この環境用に開発されたアプリケーションでは、パーシスタンスをアプリケーション自身で管理するか、サード・パーティーのソリューションを使用してパーシスタンスを使用したデータベースの更新および取得を処理する必要があります。Java™ Persistence API (JPA) は、パーシスタンスおよびオブジェクト関連マッピングを管理するためのメカニズムを提供し、EJB 3.0 仕様以降で機能します。
JPA 仕様では、ベンダー固有のマッピング実装に依存するのではなく、内部でオブジェクト関連マッピングが定義されます。JPA は、Java Enterprise Edition (Java EE) 環境に適用される Java プログラミング・モデルに基づいていますが、JPA は、アプリケーション機能をテストするために Java SE 環境内で機能できます。
JPA は、パーシスタンス・プログラミング・モデルを単純化したものです。JPA 仕様では、ベンダー固有のマッピング実装に依拠するのではなく、オブジェクト関連マッピングが明示的に定義されます。JPA は、アノテーションまたは XML を使用してオブジェクトをデータベースの 1 つ以上の表にマップすることで、オブジェクト関連マッピングの重要なタスクを標準化します。パーシスタンス・プログラミング・モデルをさらに単純化するために、以下のようになっています。
- EntityManager API は、データベースのオブジェクトを永続化、更新、取得、または削除できます。
- JDBC や SQL コードを記述してパーシスタンスを維持する必要なしに、EntityManager API およびオブジェクト関連マッピング・メタデータによって、データベース操作の大部分が処理されます。
- JPA は、独立した EJB 照会言語 (JPQL とも呼ばれる) を拡張した照会言語を提供します。この照会言語を使用して、処理しているデータベースに固有の SQL 照会を記述することなく、オブジェクトを取得できます。
JPA は、Java Enterprise Edition (Java EE) コンテナーの内側と外側の両方で動作するように設計されています。コンテナーの内側で JPA を実行した場合、アプリケーションはコンテナーを使用して、パーシスタンス・コンテキストを管理できます。JPA を管理するコンテナーが存在しない場合、アプリケーションは自身でパーシスタンス・コンテキスト管理を処理する必要があります。コンテナー管理パーシスタンス用に設計されたアプリケーションは、パーシスタンスを処理するためにコード実装をそれほど必要としませんが、そうしたアプリケーションをコンテナーの外側で使用することはできません。独自のパーシスタンスを管理するアプリケーションは、コンテナー環境または Java SE 環境で機能することができます。
EJB 3.x プログラミング・モデルをサポートする Java EE コンテナーは、JPA 実装 (パーシスタンス・プロバイダーとも呼ばれる) をサポートする必要があります。JPA パーシスタンス・プロバイダーは、以下のエレメントを使用して、EJB 3.x 環境におけるより容易なパーシスタンス管理を使用可能にします。
- パーシスタンス・ユニット
- リレーショナル・データベースで Java クラスをマップする完全なオブジェクト関係モデル (エンティティー + サポート構造) を定義します。EntityManagerFactory はこのデータを使用して、EntityManager を使用してアクセスできるパーシスタンス・コンテキストを作成します。
- EntityManagerFactory
- データベース対話用の EntityManager を作成するために使用されます。一般的にアプリケーション・サーバー・コンテナーでこの機能を提供しますが、JPA アプリケーション管理パーシスタンスを使用している場合は、EntityManagerFactory は必須です。EntityManagerFactory のインスタンスは、パーシスタンス・コンテキストを表します。
- パーシスタンス・コンテキスト
- アプリケーションが現在取り扱っているアクティブ・インスタンスのセットを定義します。手動で、または注入を使用してパーシスタンス・コンテキストを作成することができます。
- EntityManager
- アプリケーションによって使用されているエンティティー・オブジェクトのアクティブ・コレクションを維持するリソース・マネージャー。EntityManager は、オブジェクト関係マッピングのためのデータベース対話とメタデータを処理します。EntityManager のインスタンスは、パーシスタンス・コンテキストを表します。コンテナー内のアプリケーションは、アプリケーションへの注入を使用して、または Java コンポーネント名前空間で検索して、EntityManager を取得できます。アプリケーションが自身のパーシスタンスを管理する場合、EntityManager は EntityManagerFactory から取得されます。
- エンティティー・オブジェクト
- データベース表内の行を最も単純な形式で表す単純な Java クラス。エンティティー・オブジェクトは、具象クラスまたは抽象クラスにすることができます。プロパティーまたはフィールドを使用して、状態が維持されます。