SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

今からでも遅くない、JPAを学ぼう!

今からでも遅くない JPAを学ぼう!(前編)
O/Rマッピングフレームワークへの招待

O/Rマッパーを体験しましょう

ダウンロード サンプルコード (5.3 KB)

JPAを使っての実装

実装のための準備

 前節の冒頭でも書きましたが、JPA自体はO/Rマッパーを隠ぺいするため仕様です。隠ぺいという言葉が否定的に聞こえるのであれば、O/Rマッパーを意識せずにO/Rマッピングを行うための仕様であると言えます。

 とは言え、環境を構築する場合にはO/Rマッパーを意識せざるを得ません。今回はGlassFishにバンドルされているTopLink EssentialsというO/Rマッパーを使用します。バンドルされているため、GlassFishをインストールすればTopLink Essentialsもインストールされます。開発環境としてはNetBeansを使用します。GlassFishとNetBeansのインストール方法については「GlassFishとNetBeansのインストール」を参考にしていただければと思います。

 ちなみにJBossにはHibernateがバンドルされています。バンドルされているWebアプリケーションサーバであれば準備はこれだけです。データベースはMySQLを使用します。インストールについては「Webアプリケーションの作成 GlassFish管理コンソールを使う」を、操作の仕方については「Webアプリケーションの作成 MySQL Workbenchを使う」を参照ください。

 一からデータベースを構築することは難しいため、当記事のトップにデータベース構築サンプルとして.sqlファイルを用意しています。MySQL Workbenchでのインポートの仕方については「Webアプリケーションの作成 JDBCレルムで認証実現」の4ページ目で解説しています。ページトップに「サンプルコード」のsqlファイルとして置いています。MySQL Workbenchでimportしてデータベースの構築を行ってください。

NetBeansを使っての実装

プロジェクトの作成

 前編ではJavaアプリケーションを使ってJPAを実装します。

 NetBeansで[ファイル]-[新規プロジェクト]をクリックすると[新規プロジェクト]画面が開きます。右ペインに[プロジェクトを選択]があり、その下に[カテゴリ]があるので[Java]を選択します。その右側にある[プロジェクト]の[Javaアプリケーション]を選択し[次へ]ボタンをクリックします。

 [新規プロジェクト]画面はそのままで、右ペインが[名前と場所]に変っているはずです。[プロジェクト名]は何でも構いませんが、今回は「JPASample01」と入力します。[主クラスを作成]のチェックボックスにチェックを入れ、主クラス名にはパッケージ名を含んだクラス名を入力します。ここでは「ja.kawakubo.JPAStandalone」と入力します。パッケージ名は筆者のドメイン名であるため、適宜変更してください。

 [完了]ボタンをクリックすると右ペインにJPAStandaloneクラスがエディタで開きます。

JPAのプレイヤーの紹介

 いきなりJavaアプリケーションを作成しても構いませんが、やはり基本となるプレイヤーは整理する必要があります。表1がJPAの主要なプレイヤーです。後編では裏方さんも紹介します。

表1.JPAプレイヤーズ一覧
JPAのプレイヤー 役割
Entityクラス Entityという言葉は多用されますが一般的にRDBのテーブルを表します。それをオブジェクトモデルとして表現したものがEntityクラスです。この時点でO/Rマッピングの中心となるのがEntityクラスであることが分かります。
Entityオブジェクト Entityに対し、Entityインスタンスはテーブルの1行を表します。それをオブジェクトモデルとして表現したものがEntityオブジェクトです。つまりEntityクラスをインスタンス化したものを当記事ではEntityオブジェクトと呼ぶことにします。
Entityマネージャ Entityオブジェクトを使い、実際のRDBに対しCRUD操作を行います。
Entityマネージャファクトリ 文字通り、Entityマネージャを生成する役割を持っています。

Entityクラスの要件

 Entityクラスは以下に従ってコーディングする必要があります。

  • javax.persistence.Entityアノテーションによりクラスをアノテーションしなくてはならない
  • publicまたはprotectedの引数のないコンストラクタを持っていなくてはならない。ただし、その他のコンストラクタも持つことはできる
  • クラス、メソッド、永続性フィールド(RDBのテーブルのカラムに相当するフィールド)をfinal宣言してはならない
  • EntityオブジェクトはEntityマネージャによりRDBのCRUD操作と結び付けられている状態(MANAGED状態)と結び付けられていない状態(DETACHED状態)があるが、DETACHED状態の値として渡される場合、Serializableインターフェースを実装しなければならない
  • Entityクラスでないクラスを継承する場合、その継承されるクラスはEntityクラスである必要がある
  • 永続性インスタンス変数は、private、protected、package-privateのいずれかで宣言されていなければならず、Entityクラスのメソッドを介してのみアクセスできる

 以上の規則に従ってEntityクラスを作成します。データベースは「実装のための準備」で構築したimoshopというスキーマを使用します。その中にmeigaraテーブルが存在しています。そのmeigaraテーブルを表すMeigara.javaというEntityクラスを作成します。

 クラスを作成するにはNetBeansの左ペインから[プロジェクト]タブを選択します。JPASample01プロジェクトを右クリックし、[新規]-[Javaクラス]を選択すると[新規Javaクラス]画面が表示されます。[クラス名]に「Meigara」、[パッケージ名]に「jp.kawakubo」と入力し[完了]ボタンをクリックするとMeigaraクラスを作成するエディタが右ペインに表示されます。

 ただし、このままではJPA関連のクラスが存在しないため、TopLink Essentialライブラリをプロジェクトに追加する必要があります。NetBeansの左ペインで[プロジェクト]-[JPASample01]-[ライブラリ]を選択し、右クリックします。[プロパティー]をクリックすると[プロジェクトプロパティー]画面が表示されるので、右ペインの[コンパイル]タブを開き、右側の[ライブラリを追加]ボタンをクリックします。[ライブラリを追加]画面が表示され、[大域ライブラリ]の下に追加すべきライブラリの候補が並んでおり、下の方にスクロールすると[TopLink Essentials]があるはずです。それを選択し、[ライブラリを追加]ボタンをクリックすると、元の[プロジェクトプロパティー]画面に戻ります。[了解]ボタンをクリックすると、プロジェクトのライブラリにtoplink-essential.jarとtoplink-essentials-agent.jarが追加されていればOKです。

 これでjavax.persistence.*のクラスが使用できるようになります。また、MySQLのドライバを追加する必要があります。上記と同様の手順で[大域ライブラリ]から[MySQL JDBCドライバ]を選択してライブラリを追加してください。

次のページ

この記事は参考になりましたか?

今からでも遅くない、JPAを学ぼう!連載記事一覧
この記事の著者

川久保 智晴(カワクボ トモハル)

haruプログラミング教室(https://haru-idea.jp/)主宰。COBOL、FORTRANで13年、Javaを中心としたWeb開発で11年。3つしか言語知らないのかというとそうでもなく、sed/awk、Perl、Python, PHP,  C#, JavaScriptなども一時期は業...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5041 2010/04/27 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー