Help us understand the problem. What is going on with this article?

JPAの基礎1

More than 1 year has passed since last update.

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形式のファイルを用いて、データベースとの接続情報などの基本設定を記述します。

persistence.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&amp;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やユーザー名、パスワードなどです。また、実装固有の設定情報を記述することもできます。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした