Java™ Persistence
API は、パーシスタンス・プログラミング・モデルを簡素化したものです。
データ・パーシスタンス (なんらかの形式の不揮発性ストレージ (リレーショナル・データベースなど) 内で複数のアプリケーション・セッションにまたがってデータを維持する機能) は、エンタープライズ・アプリケーションにとってきわめて重要です。
この環境用に開発されるアプリケーションは、それ自体でデータ・パーシスタンスを管理するか、データベースの更新および検索を処理するためのサード・パーティー製ソリューションを使用しなければなりません。
JPA には、データ・パーシスタンスとオブジェクト関連マッピングを管理するメカニズムと、EJB 3.0 仕様の関数が備わっています。
JPA は、Java EE 環境に適用される Java プログラミング・モデルに基づいていますが、Java SE 環境でも機能します。JPA 仕様は、ベンダー固有のマッピング実装に依存するのではなく、オブジェクト関連マッピングを内部的に定義し、オブジェクトをデータベース表にマップするために注釈または XML を使用します。
JPA は、Java Enterprise Edition (Java EE)
コンテナーの内側と外側の両方で動作するように設計されています。コンテナーの内側で JPA を実行する場合、アプリケーションはコンテナーを使用してパーシスタンスを管理することができます。
JPA を管理するコンテナーがない場合、アプリケーション自体でパーシスタンス管理を処理する必要があります。
コンテナー管理パーシスタンス用に設計されたアプリケーションをコンテナーの外側で使用することはできませんが、
独自のパーシスタンスを管理するアプリケーションは、コンテナー環境
でも Java SE 環境でも機能します。
また JPA では照会言語 JPQL も提供されています。JPQL を使用すると、作業しているデータベースに固有の SQL 照会を作成しなくてもオブジェクトを検索できます。
JPA をサポートする Java EE コンテナーは、パーシスタンス・プロバイダーを提供する必要があります。
JPA パーシスタンス・プロバイダーは、EJB 3.0 環境でデータを永続させるために以下の要素を使用します。
- エンティティー・オブジェクト: エンティティーは、データベース表内の行を表す単純な Java クラスです。
エンティティーは、具象クラスまたは抽象クラスとすることができます。エンティティーは、プロパティーまたはフィールドを使用して状態を維持します。
- EntityManager:
EntityManager オブジェクトは、アプリケーションが使用しているエンティティー・オブジェクトのアクティブなコレクションを保持します。EntityManager オブジェクトは、オブジェクト関連マッピングに関するデータベース対話とメタデータを処理します。
EntityManager オブジェクトのインスタンスは、パーシスタンス・コンテキストを表します。コンテナー内のアプリケーションは、
EntityManager を、アプリケーションへの注入によって、または、
Java コンポーネント名前空間における
検索によって取得できます。アプリケーションが自身のパーシスタンスを管理する場合、EntityManager は
EntityManagerFactory から取得されます。通常は、アプリケーション・サーバー・コンテナーがこの機能を提供しますが、JPA アプリケーション管理パーシスタンスを使用している場合には EntityManagerFactory が必要となります。
注: EntityManager の注入がサポートされているのは、以下の成果物に関してのみです。
- EJB 3.0 セッション Bean。
- EJB 3.0 メッセージ駆動型 Bean。
- サーブレット。ただし JSP では注入はサポート対象外。
- アプリケーション・クライアントのメイン・クラス。
- EntityManagerFactory: このファクトリーは、データベース相互作用のための EntityManager を作成するために使用されます。
- パーシスタンス・ユニット: パーシスタンス・ユニットは、エンティティー・クラス・オブジェクトとリレーショナル・データベースとの関係を記述する宣言メタデータからなります。
EntityManagerFactory はこのデータを使用して、EntityManager を介してアクセスできるパーシスタンス・コンテキストを作成します。
- パーシスタンス・コンテキスト: パーシスタンス・コンテキストは、アプリケーションが処理している一連のアクティブ・インスタンスです。
パーシスタンス・コンテキストは、
手動で、または注入を使用して作成することができます。