前回はEJB 3.0のインターセプタ機能を使ったセッションBeanとコンテナ管理によるトランザクションについて説明しました。今回はJava EE(Enterprise Edition)やJava SE(Standard Edition)におけるO/Rマッピングの標準になる「Java Persistence API」*1を紹介しましょう。

 Java Persistence APIを使うメリットは大きく二つあります。一つ目は,少ないプログラム・コードでデータにアクセスできることです。Java Persistence APIは,Javaオブジェクトをデータベースに格納したり,データベースのデータをJavaオブジェクトへ変換したりする処理を自動化してくれます。したがって,データベース・アクセス用のAPIであるJDBCを直接使ったアプリケーションよりも少ないプログラム・コードでデータベースへのアクセスを実現できます。

 二つ目のメリットは,移植性の高いアプリケーションを作成できることです。通常,使用するデータベースが異なると,製品固有のSQLに依存したコードがネックになり移植が難しくなります。Java Persistence APIはデータベース製品間の違いの多くを吸収してくれるため,高い移植性を保てます。

 Java Persistence APIを理解するには,まず主要な登場人物を覚えることが重要です。「エンティティ」「エンティティ・マネージャ」「永続コンテキスト」「EJB QL」の四つです。エンティティとはデータベースに永続化可能なJavaオブジェクトです。エンティティのクラスは通常のJavaクラスにアノテーション(注釈)や設定ファイルでエンティティであることを示して作成します*2。エンティティ・マネージャはJava Persistence APIにより提供されるインタフェースで,エンティティの取得や永続化を行うAPIを持ちます。永続コンテキストはメモリー上のエンティティの集合です。これはJava Persistence APIの実装によって管理されます。EJB QLはエンティティを取得するための問い合わせ言語です。記述方法はSQLに似ていますが,特定のデータベースに依存しません。

 Java Persistence APIを利用したアプリケーションは図1のようになります。Java EEとJava SEのどちらでも基本的に構成は変わりません。

図1 Java Persistence APIを利用するアプリケーションのイメージ [画像のクリックで拡大表示]