【特集】
Java Persistence API(以下、JPA)は、JSR 220で仕様が標準化されているEJB 3.0(Enterprise JavaBeans, Version 3.0)の一部として新たに導入された、Javaオブジェクトの永続化のためのAPIである。EJB 3.0以前は、永続化に関する主要なAPIとしてJDO(Java Data Object)とEJB Entity Beanの2種類があった。しかしこの両者の間には互換性がないため混乱の元となっていた。このJDOとEntity Beanの整合性を取るために新たに設計されたのがJPAで、機能的には従来のEntity Beanに相当するPOJOベースのAPIとなっている。
JPAはEJB 3.0と同様にJSR 220においてその仕様が定められているが、APIとしてはEJBからは独立しているため単体で使用することも可能である。そこで本稿では、EJBの実装を持たないJava SEプラットフォームにおいて、JPAを利用してJavaオブジェクトの永続化を行う方法を解説する。
なお、EJB 3.0の仕様はここで公開されている。
従来のJava SEでも、JDBCを使用したプログラミングによってJavaオブジェクトの持つデータを外部のデータベースへ格納することができた。しかしこの方法ではJavaオブジェクトとデータベースのテーブルとの関連付けを自身で定義しなければならず、プログラムが繁雑になるという問題があった。その点、JPAを使用すれば、データベースを直接意識せずにJavaオブジェクトのデータを格納しておくことができる。さらにJPAではアノテーションを利用してデータベーステーブルとのマッピングやデータベース上のリレーションシップをシンプルなコードで記述することができる。
たとえば、永続化可能なJavaオブジェクトである「エンティティ」は@Entityアノテーションで表現する。エンティティには@Idアノテーションによって固有の番号を振ることができる。またリレーションシップを表現するアノテーションとして@OneToOne、@OneToMany、@ManyToOne、@ManyToManyなどが用意されている。
エンティティの管理は「エンティティマネージャ」によって行われる。エンティティマネージャはJPAによって用意され、エンティティの取得や永続化など、データベースや永続かコンテキストとの仲介となるAPIを提供する。「永続化コンテキスト」とはメモリー上のエンティティの集合を指す。
エンティティマネージャによって管理されるエンティティクラスやエンティティによって使用されるデータソースは、「永続化ユニット」によってコンテナに伝えられる。永続化ユニットはXML形式の設定ファイルによって定義される。
その他、JPAではデータアクセス時のトランザクション管理を行うエンティティ・トランザクションなどのAPIも提供されている。これによってトランザクションのコミットやロールバックなどが管理される。
本稿ではNetBeans環境上でJPAを利用したアプリケーションを作成する方法を、JPAの主要な実装であるTopLink EssentialsおよびHibernate EntityManagerについてそれぞれ解説する。
【コラム】ライトニングJava 第70回 JSPプログラミング(1) - ディレクティブ
【コラム】ダイナミックObjective-C 第57回 デザインパターンをObjective-Cで - Prototype (1)
| トマトを食べれば痩せられる!? -京大ら、新発見の成分で肥満改善効果を実証 [21:00 2/10] |
| JAXA、液体シリコン中に残存する共有結合を観察 -大口径ウェハの実現に期待 [20:11 2/10] |
| NEDOなど、熱膨張が小さな樹脂複合材料ペレットの量産化に成功 [19:22 2/10] |
| 理研、一般顕微鏡を蛍光顕微鏡に強化できるアダプタを試作して性能を実証 [19:15 2/10] |
| 天の川のブラックホールが小惑星を飲み込んでいる - NASAが発表 [18:08 2/10] |
|
【連載】鉄道トリビア 第137回 山手線と京浜東北線から●●●が消えた!? [08:00 2/11] ライフ |
|
JRグループ、「周遊きっぷ」を見直し - 19の周遊ゾーンが3/31で販売終了に [07:30 2/11] ライフ |
|
「青春18きっぷ」春季用は2/20発売 - 夏季用・冬季用の発売は現時点で未定 [07:30 2/11] ライフ |
|
【ハウツー】炊飯器でつくるチャーシューが簡単すぎ、しかもおいしい! [07:00 2/11] ライフ |
|
【連載】出社前に。日常生活ですぐに使える! 英語クイズ 第118回 「どうぞお話しください、あなたが話す番です」ってなんて言う? [07:00 2/11] ライフ |