JPAの概要
JPAとは?
JPAは「Java Persistence (JSR 338)」の略称であり、Java EE標準のO/R MappingおよびDAOの技術仕様です(元々の名称は「Java Persistence API」であり、その略称「JPA」が現在でも一般的に使用されているため、このドキュメントでも「JPA」という名称を使用します)。
現行のJava EE 7に含まれるバージョンは「2.1」
JPAはJava EEの「Enterprise Application Technologies」に含まれる技術仕様ですが、Servlet/JSPやEJBなどと異なり、コンテナ・ベースのアーキテクチャを採用していないためJava SEでも利用可能です。
JPAの代表的な実装
JPAの代表的な実装には以下に示すものがあります。
「EclipseLink」は元々Oracleが開発し、eclipse.orgに寄贈したJPAのRIです。また「Hibernate ORM」はJPA仕様のオリジナルとなったORM Frameworkであり、実質この2つの実装の何れかを使用するのが一般的です。
「EclipseLink 2.5」以降および「Hibernate ORM 4.3」以降のバージョンはJPA 2.1に対応していますが、「Apache Open JPA」の現行バージョン「2.x」はJPA 2.0にしか対応していません(JPA 2.1対応バージョンは現在開発中です)。
JPAの構成要素
最初にJPAのテクノロジーを構成する主な要素を簡単に見ておきましょう。
● Entity
「永続化オブジェクト」を表します。具体的にはデータベースのテーブルと1対1で対応する「
Javaのクラス(Entity Class)」およびその「インスタンス(Entity Object)」です。
● Entity Manager
Entityオブジェクトのライフサイクル管理とDAO機能を提供します。
● Persistence Context
「永続化コンテキスト」を表します。
● Persistence Unit
Persistence Contextを生成します。
● Transaction
「トランザクション」を表します。
● JPQL(Java Persistence Query Language)
JPA専用の問い合わせ言語です。SQLによく似た言語であり、Entityの型を識別することにより、型安全な問い合わせを記述することができる仕組みが提供されています。
JPAの設定ファイル
JAPでは以下に示すような「persistence.xml」と呼ばれるXML形式のファイルを用いて、データベースとの接続情報などの基本設定を記述します。
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1"
xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="JPAExample">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>entity.Author</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Tokyo" />
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="mysql" />
</properties>
</persistence-unit>
</persistence>
persistence
persistence.xmlドキュメントのルート要素であり、JPAのバージョンや名前空間の参照などを記述します。
persistence-unit
persistenceの直接の子要素であり、単一の永続化対象を表します。具体的には1つのデータベースへの接続情報と関連するプロパティの設定です。このpersistence-unitでは「name」属性の記述が必須であり、この名前を用いて「persistence-unit」を一意に識別します。
provider
persistence-unitの子要素であり、使用するJPAプロバイダーを記述します。JPAプロバイダーとは「JPAの実装」のことであり、上記例ではEclipseLinkを使用する場合の記述となっています。
class
persistence-unitの子要素であり、このユニットでの管理対象とするEntityクラスを記述します。
properties
データベースの接続に関連する情報を記述します。具体的にはJDBC URIやユーザー名、パスワードなどです。また、実装固有の設定情報を記述することもできます。