Java Persistence API

Java Persistence API（JPA）とは、関係データベースのデータを扱うJava SEおよびJakarta EE（旧・Java EE）のアプリケーションを開発するためのJava用フレームワークである。

JPAは、以下の3つの部分から成る。
 API（javax.persistence パッケージで定義されている）
 Java Persistence Query Language
 オブジェクト/関係メタデータ
JPAのリファレンス実装はEclipseLinkとして実装されている。

歴史
Java Persistence API 1.0は、JSR 220 (EJB 3.0) Expert Groupの作業の一部として2006年5月11日に策定された。JPA 2.0はJSR 317として、2009年12月10日にJava EE 6やEJB 3.1と同一日に承認された。JPA 2.1はJSR 338として、2013年4月22日に承認された。

エンティティ 
JPAにおける永続性エンティティは、関係データベースにおける表を表した軽量Javaクラスである。そのインスタンスは表の個別の行に対応する。通常、他のエンティティとの関係を持ち、その関係はオブジェクト/関係メタデータで表される。オブジェクト/関係メタデータは、アノテーションを使ってエンティティクラスのソースファイルに直接記述することもできるし、別のXMLファイルとして記述することもできる。

Java Persistence Query Language 
Java Persistence Query Language (JPQL) は、関係データベースに格納されたエンティティに対するクエリに使用される。文法的にはSQLに似ているが、データベースの表を直接操作するのではなく、エンティティオブジェクトを操作する。

Enterprise JavaBeans との関係 
Java Persistence API 1.0は EJB 3.0仕様の一部であり、EJB 3.0はJava EE 5 プラットフォームの一部である。ただし、永続性を利用したアプリケーションを実行するのにEJBコンテナや Java EEアプリケーションサーバが必須というわけではない。

Java Persistence API 2.0はEJB 3.1とは分離され、独立したJSR仕様として定義された。EJB 3.1やJPA 2.0はJava EE 6の一部である。

Service Data Object API との関係 
Java Persistence APIは、HibernateやTopLinkなどのオブジェクト関係マッピングツールの主要機能である関係永続性のために設計された。一般にJava Persistence APIはEJB 2.0仕様を大幅に強化したものと受け取られている。Service Data Objects (SDO) API (JSR 235) はJava Persistence APIとは目的が異なり、相互に補完するものとされている。SDO API はサービス指向アーキテクチャのために設計されており、関係データモデルだけでなく様々なデータ形式や各種プログラミング言語を扱う。SDO APIのJavaバージョンはJCPによって管理され、C++バージョンはOASISが管理する。

開発の背景 
EJB 2.0までのEntity Beanなどのエンタープライズ・ビーンは、重すぎて複雑すぎ、Java EEアプリケーションサーバでしか使えないという問題があった。このため、その代替としてData Access Objectやオープンソースのフレームワークを使った軽量の永続性オブジェクトが使われることが多くなった。そのようなサードパーティーの永続性フレームワークの機能を集約したのがJava Persistence APIであり、HibernateやTopLinkのようなプロジェクトも現在ではJava Persistence APIを実装している。

関連項目 
仕様
 Java Data Objects
実装
DataNucleus
GlassFish
Hibernate

外部リンク 
 一般的情報
 Sun's Persistence page
 GlassFish's Persistence page
 The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 317
 Documentation for the final version of the EJB3 spec (called JSR220)
 Nabble JPA Forum
 ドキュメンテーション
 Persistence in the Java EE 5 Tutorial
 Sun's Persistence FAQ
 Java Persistence API Javadoc
 Getting started with Java Persistence API 1.0
 実装
 Amber - Resinの一部
 Apache OpenJPA
 DataNucleus
 GlassFish
 Hibernate
 Oracle
 EclipseLink
 Oracle TopLink
 Oracle Kodo
 SAP Netweaver Application Server
 SimpleJPA - Amazon SimpleDB
 記事
 Master the New Persistence Paradigm with JPA
 Persistence Pays Offs: Advanced Mapping with JPA

Java API
Javaプラットフォーム
Java enterprise platform
Java specification requests
永続性