Jakarta PersistenceはJPA (旧称Java Persistence APIの略)とも呼ばれ、エンタープライズJavaアプリケーションにおけるリレーショナル データの管理を記述するJakarta EE アプリケーション プログラミングインターフェイス仕様です。
この文脈における永続性には、次の 3 つの領域が含まれます。
- パッケージ内で定義されている API 自体( Jakarta
jakarta.persistenceEEjavax.persistence8 以前) - Jakarta Persistence Query Language (JPQL、旧称 Java Persistence Query Language)
- オブジェクト/リレーショナルメタデータ
JPAのリファレンス実装はEclipseLinkです。[1]
歴史
JPA 1.0仕様の最終リリース日は、 Java Community Process JSR 220の一部として2006年5月11日でした。JPA 2.0仕様は2009年12月10日にリリースされました(Java EE 6プラットフォームにはJPA 2.0が必要です[ 2])。JPA 2.1仕様は2013年4月22日にリリースされました(Java EE 7プラットフォームにはJPA 2.1が必要です[3])。JPA 2.2仕様は2017年夏にリリースされました。最新バージョンのJPA 3.1仕様は、Jakarta EE 10の一部として2022年春にリリースされました。[1]
エンティティ
永続エンティティは軽量のJava クラスであり、その状態は通常、リレーショナル データベースのテーブルに永続化されます。このようなエンティティのインスタンスは、テーブル内の個々の行に対応します。エンティティは通常、他のエンティティと関係を持ち、これらの関係はオブジェクト/リレーショナル マッピング (ORM) メタデータを通じて表現されます。このメタデータは、注釈を使用してエンティティ クラス ファイルに直接指定することも、アプリケーションとともに配布される別のXML記述子ファイルで指定することもできます。
例
アノテーションを使用して宣言された ORM メタデータを持つエンティティ クラスの例 (簡潔にするために、インポート ステートメントと setter/getter は省略されています)。
@Entity
パブリッククラスPerson { @Idプライベートlong id ;プライベートString firstName ;プライベートString lastName ;プライベートint age ; }
アノテーション@Entityは、クラスがエンティティを表すことを宣言します。エンティティの主キー@Idとして機能する属性を宣言します。追加のアノテーションを使用して、追加のメタデータを宣言したり (たとえば、アノテーション内のデフォルトのテーブル名を変更したり)、エンティティ間の関連付けを作成したりできます。
@Table
クエリ言語
Jakarta Persistence Query Language (JPQL、旧称 Java Persistence Query Language) は、リレーショナル データベースに格納されているエンティティに対してクエリを実行します。クエリは構文がSQLクエリに似ていますが、データベース テーブルを直接操作するのではなく、エンティティ オブジェクトに対して操作します。
モチベーション
EJB 3.0 仕様が導入される前は、多くのエンタープライズ Java 開発者は、エンティティ Bean を使用する代わりに、永続性フレームワーク ( Hibernateなど) またはデータ アクセス オブジェクト(DAO) によって提供される軽量の永続オブジェクトを使用していました。これは、以前の EJB 仕様では、エンティティ Bean は非常に複雑なコードを必要とし、リソース フットプリントが大きかったことと、Bean と DAO オブジェクトまたは永続性フレームワーク間のソース コード内の相互接続と依存関係のため、Java EE アプリケーション サーバーでしか使用できなかったためです。そのため、サード パーティの永続性フレームワークで最初に提供された機能の多くが Java Persistence API に組み込まれ、HibernateやTopLink EssentialsなどのプロジェクトはJava Persistence API 仕様の実装になりました。
関連技術
エンタープライズ Bean
EJB 3.0仕様 (それ自体が Java EE 5 プラットフォームの一部) には、Java Persistence API の定義が含まれていました。ただし、開発者は、この永続性 API を使用するアプリケーションを実行するために、EJB コンテナや Java EE アプリケーション サーバーを必要としません。[4] Java Persistence API の将来のバージョンは、EJB JSR/仕様ではなく、 別のJSRと仕様で定義される予定です。
Java Persistence API は、EJB 2.0 CMP (Container-Managed Persistence) の永続性ソリューションを置き換えます。
Java データ オブジェクト API
Java Persistence API は、Java Data Objects API と EJB 2.0 Container Managed Persistence (CMP) API を統合するために開発されました。2 つの API をサポートするほとんどの製品は、Java Persistence API をサポートしています。
Java Persistence API は、オブジェクトリレーショナルマッピング(ORM)に重点を置くことで、リレーショナルデータベース管理システムの永続性のみを規定しています。一部の JPA プロバイダーは他のデータベースモデルをサポートしていますが、これは JPA の設計範囲外です。JPA 仕様の導入セクションには、「この作業の技術的目的は、Java ドメインモデルを使用してリレーショナルデータベースを管理する Java アプリケーション開発者にオブジェクト/リレーショナルマッピング機能を提供することです。」と記載されています。[5]
Javaデータオブジェクト仕様は、ORM だけでなく、フラット ファイル データベースやNoSQLデータベース (ドキュメント データベース、グラフ データベース、その他多数のデータストアを含む) などの他の種類のデータベース モデルへの永続性もサポートします。
サービスデータオブジェクトAPI
Java Persistence APIの設計者[6]は、リレーショナル永続性を提供することを目指しており、主要な領域の多くをHibernateやTopLinkなどのオブジェクトリレーショナルマッピングツールから採用しています。Java Persistence APIはEJB 2.0を改良して置き換えたものであり、EJB 3.0に含まれています。サービスデータオブジェクト(SDO)API(JSR 235)は、Java Persistence APIとはまったく異なる目的を持っており、[7] [8]補完的であると考えられています。SDO APIは、サービス指向アーキテクチャ、リレーショナルデータだけでなく複数のデータ形式、および複数のプログラミング言語向けに設計されています。Java Community ProcessはSDO APIのJavaバージョンを管理し、SDO APIのC++バージョンはOASISを介して管理されています。
休止状態
Gavin Kingによって設立されたHibernateは、Java用のオープンソース のオブジェクトリレーショナルマッピングフレームワークを提供します。バージョン3.2以降では、Java Persistence APIの実装が提供されています。[9] [10] Kingは、JPAの開発を担当するJCP専門家グループであるJSR 220 [11]でJBossを代表しました。これにより、 JPAとHibernateの関係をめぐる論争と憶測が続いています。[要出典] Sun Microsystemsは、 [12]アイデアはHibernateやJava Data Objectsを含むいくつかのフレームワークから生まれたと述べています。
スプリングデータ JPA
Spring Data JPAは、JavaアプリケーションフレームワークSpringに基づくドメイン駆動設計の重要な構成要素であるリポジトリ抽象化の実装です。利用可能なすべてのJPA実装を透過的にサポートし、 CRUD操作とデータベースクエリの便利な実行をサポートします。 [13] : 47 [14]
バージョン履歴
JPA2.0 について
JPA 2.0 の新しいバージョンの開発は、2007 年 7 月に Java コミュニティ プロセスで JSR 317 として開始されました。JPA 2.0 は、2009 年 12 月 10 日に最終版として承認されました。JPA 2.0 の焦点は、一部の一般的な ORM ベンダーに存在しながら JPA 1.0 の合意を得られなかった機能に対処することでした。
含まれる主な機能は次のとおりです。
- 拡張されたオブジェクトリレーショナルマッピング機能
- ORM で多対一の関係でリンクされた埋め込みオブジェクトのコレクションのサポート
- 順序付きリスト
- アクセスタイプの組み合わせ
- 基準クエリAPI
- SQLヒントの標準化
- DDL生成をサポートするための追加メタデータの標準化
- 検証のサポート
- 共有オブジェクト キャッシュのサポート。
JPA 2.0 をサポートするベンダー:
- バトゥー JPA
- DataNucleus (旧 JPOX)
- EclipseLink (旧Oracle TopLink )
- IBM、WebSphere Application Server向け[15]
- JBossとHibernate
- オブジェクトDB
- オープンJPA
- オリエントDB
- Versant Corporation JPA (オブジェクトデータベース) [16]
JPA2.1 について
JPA バージョン 2.1 の開発は、2011 年 7 月に JSR 338 として開始されました。JPA 2.1 は、2013 年 5 月 22 日に最終版として承認されました。
含まれる主な機能は次のとおりです。
- データベースとオブジェクト型間のカスタムコード変換を可能にするコンバーター
- 基準の更新/削除により、基準 API を通じて一括更新と削除が可能になります。
- オブジェクトの部分的または指定されたフェッチまたはマージのためのエンティティ グラフ。
- 算術サブクエリ、汎用データベース関数、結合 ON 句、TREAT オプションなどの JPQL/Criteria の機能強化。
- スキーマ生成
- ストアドプロシージャのサポート
JPA 2.1 をサポートするベンダー:
- データニュークリアス
- エクリプスリンク
- 休止状態
- OpenJPA (バージョン 2.2.0 以降)
JPA2.2 について
メンテナンス リリースである JPA 2.2 の開発は、JSR 338 に基づいて 2017 年に開始されました。メンテナンス レビューは 2017 年 6 月 19 日に承認されました。
含まれる主な機能は次のとおりです。
- 関連するすべてのアノテーションに@Repeatableを追加する
- メタアノテーションで使用される JPA アノテーションのサポート
- クエリ結果のストリーミング
- AttributeConverters が CDI 注入可能になる機能
- Java 8の日付と時刻型のサポート
JPA 2.2 をサポートするベンダー:
- DataNucleus (バージョン 5.1 以降)
- EclipseLink (バージョン 2.7 以降)
- Hibernate (バージョン 5.3 以降)
- OpenJPA (バージョン 3.0 以降)
ジャカルタ パーシスタンス 3.0
JPA は 2019 年に Jakarta Persistence に名前が変更され、バージョン 3.0 は 2020 年にリリースされました。これには、パッケージとプロパティの名前が javax.persistence から jakarta.persistence に変更されたことが含まれています。
Jakarta Persistence 3.0 をサポートするベンダー:
- DataNucleus (バージョン 6.0 以降)
- EclipseLink (バージョン 3.0 以降)
- Hibernate (バージョン 5.5 以降)
- OpenJPA (バージョン 4.0 以降)
ジャカルタ パーシスタンス 3.1
バージョン3.1は2022年にリリースされました。[1]これはJakarta EE 10の一部であるため、実行するには少なくともJava 11が必要です。UUIDの処理が改善され、数学と日付/時刻の処理のためのさまざまな新しいJPQL関数、およびその他の小さな変更が追加されました。[17]
Jakarta Persistence 3.1 をサポートするベンダー:
- DataNucleus (バージョン 6.0 以降)
- EclipseLink(バージョン4.0以降)[18]
- Hibernate(バージョン6.0以降)[19]
- OpenJPA (バージョン 4.0 以降)
参照
参考文献
- ^ abc 「Jakarta Persistence 3.1」。jakarta.ee 。 2022年7月27日閲覧。
- ^ 「JavaEE 6 チュートリアル」。Oracle。
- ^ 「JavaEE 7 チュートリアル」。Oracle。
- ^ Hibernate EntityManager: Java SE 環境
Hibernate EntityManager: Java SE 環境での EntityManager の取得 - ^ 「Jakarta Persistence」. jakarta.ee . 2021年10月5日閲覧。
- ^ 「JSR 220 メンバー」。
- ^ Barreto, Charlton. 「SDO and JPA」。Digital Walkabout。2011年8月13日時点のオリジナルよりアーカイブ。2011年5月5日閲覧。
- ^ Edwards, Mike. 「SDO と Java Persistence Architecture (JPA)」。Open SOA。osoa.org。2011年5月 5 日閲覧。
- ^ "hibernate.org - Java Persistence with Hibernate". JBoss . 2008-11-17取得。Hibernate
は、Java Persistence オブジェクト/リレーショナル javaAPI と永続性管理インターフェースを実装します。
- ^ Java Persistence with Hibernate. Manning Publications. 2015年11月8日. ISBN 97816172904592013年12月8日閲覧。
ギャビン・キングはHibernateプロジェクトの創設者である。
- ^ 「JBoss.com - 業界のリーダーシップ」。JBoss。2008年 11 月 17 日閲覧。JSR
220、EJB 3.0 仕様委員会、Gavin King、Bill Burke、Marc Fleury
- ^ 「Java Persistence API FAQ」。Sun Microsystems。2008 年 8 月 22 日にオリジナルからアーカイブ。2010 年 7 月 1 日に取得。Java
Persistence API は、Hibernate、TopLink、JDO などの永続化テクノロジの優れたアイデアを活用しています。
- ^ デイナムら2014年。
- ^ 「Spring Data - プロジェクトウェブサイト」。Pivotal 。 2018年2月26日閲覧。
- ^ 「IBM WebSphere Application Server V7 Feature Pack for OSGi Applications and Java Persistence API」。ダウンロード Web サイト。IBM。2010 年 4 月 27 日。2013年12 月 8 日に閲覧。
- ^ 「Versant JPA 2 ステップ ダウンロード」。ダウンロード Web サイト。Actian。2013年 12 月 8 日時点のオリジナルよりアーカイブ。2013年12 月 8 日に閲覧。
- ^ 「Jakarta Persistence 3.1 の新機能」。Eclipse Foundation。
- ^ 「EclipseLink の TCK 結果」。Eclipse Foundation。2022年 7 月 27 日閲覧。
- ^ 「Hibernate ORM 6.0 シリーズ」。hibernate.org 。 2022年7月27日閲覧。
さらに読む
- デイナム、マーテン、ルビオ、ダニエル、ロング、ジョシュ、マック、ゲイリー(2014 年 9 月 1 日)。『春のレシピ:問題解決アプローチ』(第 2 版)。Apress。ISBN 978-1-4302-2499-0。
外部リンク
一般情報
- 公式サイト
- EJB3 仕様の最終バージョン (JSR220 と呼ばれる) のドキュメント
- GlassFish の Persistence ページは、2013 年 1 月 12 日にarchive.todayにアーカイブされました。
- JCP 永続性ページ
チュートリアル
- Java EE 6 永続性 API Javadoc
- Java EE 6 永続性 API チュートリアル
- Java EE 7 永続性 API Javadoc
- Java EE 7 永続性 API チュートリアル
- Java EE 5 チュートリアルにおける永続性
