corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Java Persistence API を利用した Hibernate の使用

Java Persistence API を使用している場合、アプリケーション内で使用する持続性プロバイダを選択できます。GlassFish アプリケーションサーバーには Oracle の Toplink 持続性プロバイダが付属していますが、アプリケーションで Hibernate 持続性プロバイダを使用するように簡単に設定し、Java Persistence API を使用してデータベースにアクセスするアプリケーションを短時間で開発できます。

このチュートリアルを開始する前に、必要に応じて次のドキュメントをお読みください。

目次

このページの内容は NetBeans IDE 6.5 が対象です

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE 6.5 Java
Java Development Kit (JDK) version 6 または
version 5
GlassFish アプリケーションサーバー V2

注: チュートリアルを開始する前に、アプリケーションサーバーを IDE に登録する必要があります。アプリケーションサーバーが IDE に登録されていない場合は、「ツール」>「サーバー」を選択し、「サーバーを追加」ボタンをクリックして登録します。すべての登録済みアプリケーションサーバーを表示するには、「サービス」ウィンドウを開き、「サーバー」ノードを展開します。

Web アプリケーションプロジェクトの作成

この課題では、sample データベースにアクセスする簡単な Web アプリケーションプロジェクトを作成します。このアプリケーションではデータの表示と変更に JSF Web インタフェースを使用するので、プロジェクト作成時には JSF フレームワークを指定します。

  1. 「ファイル」>「新規プロジェクト」(Ctrl-Shift-N) を選択します。「Java Web」カテゴリから「Web アプリケーション」を選択します。
  2. プロジェクト名に「HibernateApp」と入力し、場所を指定します。
  3. 専用フォルダを使用するオプションが選択されている場合は選択を解除します。
    このチュートリアルでは、ライブラリをほかのユーザーと共有する必要がないので、プロジェクトライブラリを専用のフォルダにコピーする理由はほとんどありません。
    「次へ」をクリックします。「次へ」をクリックします。
  4. サーバーを GlassFish に設定し、Java EE バージョンを Java EE 5 に設定します。「次へ」をクリックします。
  5. JavaServer Faces フレームワークを選択します (Visual Web JavaServer Faces ではありません)。「完了」をクリックします。

「完了」をクリックするとプロジェクトが作成され、welcomeJSF.jsp がエディタに表示されます。

エンティティークラスと持続性ユニットの作成

ここでは「データベースからのエンティティークラス」ウィザードを使用して、付属の sample データベース内の表に基づいてエンティティークラスを作成します。sample データベースは JavaDB データベースですが、ウィザードを使用すれば、データベース接続が IDE に登録されている任意のデータベースからエンティティークラスをすぐに生成できます。

ウィザードでエンティティークラスを作成するときは、エンティティーの管理方法を指定する持続性ユニットも作成します。IDE には Hibernate のサポートが組み込まれており、Hibernate は持続性プロバイダオプションの 1 つとして一覧表示されます。Hibernate を持続性プロバイダに選択すると、必要な Hibernate ライブラリがプロジェクトに自動的に追加されます。

  1. 「プロジェクト」ウィンドウでプロジェクトノードを右クリックし、「新規」>「データベースからのエンティティークラス」を選択します。「データソース」ドロップダウンリストから「jdbc/sample」データベースを選択します。ユーザー名とパスワードの入力を求められたら、「app」と「app」を使用します。リストから「CUSTOMER」表を選択し、「追加」をクリックして「次へ」をクリックします。
  2. 表とクラスの名前はデフォルトのままにし、パッケージには「hibernatesample.db」と入力します。
  3. 「持続性ユニットを作成」ボタンをクリックします。
  4. 「持続性プロバイダ」に「Hibernate」を選択し、「表生成の方針」に「なし」を選択します。持続性ユニットの名前はデフォルトのままにしておきます。「作成」をクリックしてダイアログを閉じます。
    「持続性ユニットを作成」ダイアログ
    ウィザードで「次へ」をクリックします。
  5. 「関連の取得」ドロップダウンリストから「多く」を選択します。
  6. 「コレクション型」ドロップダウンリストから「java.util.Set」を選択します。「完了」をクリックします。
    ウィザードのマッピングオプションのスクリーンショット

「完了」をクリックすると、選択した各表のエンティティークラスが作成され、「構成ファイル」ノードの下に persistence.xml が作成されます。persistence.xml を開くと、持続性ユニットの詳細を見ることができます。

持続性プロバイダとして Hibernate を選択したので、プロジェクトには Hibernate ライブラリも追加されています。「プロジェクト」ウィンドウで「ライブラリ」ノードを展開すると、プロジェクトに追加された Hibernate ライブラリを確認できます。

プロジェクトに追加された Hibernate ライブラリのスクリーンショット

persistence.xml を変更して Hibernate 固有のプロパティーをいくつか追加できます。

  1. persistence.xml をダブルクリックしてエディタでファイルを開き、エディタの最上部にある「XML」ボタンをクリックして XML ビューに切り替えます。
  2. 次のプロパティーを追加して XML を変更します。
      <persistence-unit name="HibernateApp" transaction-type="JTA">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <jta-data-source>jdbc/sample</jta-data-source>
        <properties>
            <property name="hibernate.show_sql" value="true" />
        </properties>
      </persistence-unit>
    </persistence>

    このプロパティーにより、すべての SQL 文がアプリケーションサーバーのログファイルに出力されます。

  3. 変更を保存します。

JSF ページの作成

これで、「JSF JPA CRUD」ウィザードを使用して、データの表示と変更を行う JSF ページを簡単に生成できます。ウィザードでは、エンティティークラスを選択すると、エンティティークラスごとに、次のものが生成されます。

  • JPA コントローラクラス
  • JSF コントローラクラス
  • JSF コンバータクラス
  • 4 つの JSP ファイル (Detail.jspEdit.jspList.jspNew.jsp) を含むディレクトリ
  • faces-config.xml 内にクラスの管理対象 Bean 要素、コンバータ要素、およびナビゲーション規則

ウィザードでは、生成されるクラスによって使用される例外クラスとユーティリティークラスも自動的に生成されます。

  1. プロジェクトノードを右クリックし、「新規」>「エンティティーからの JSF ページクラス」を選択します。
  2. 「すべてを追加」をクリックして、選択したクラスのリストに Customer クラスと DiscountCode クラスを追加します。「次へ」をクリックします。
  3. 「JPA コントローラパッケージ」に「hibernatesample.db」と入力します。
  4. 「JSF クラスパッケージ」に「hibernatesample.jsf」と入力します。「完了」をクリックします。

「完了」をクリックすると、hibernatesample.db パッケージ内に、エンティティークラスごとに JPA コントローラクラスが作成されます。各コントローラクラスは、対応するエンティティークラスの操作を処理します。これには、Java Persistence API を使用したエンティティークラスのインスタンスの作成、編集、および破棄が含まれます。hibernatesample.db.exceptions パッケージ内に、JPA コントローラクラスによってスローされる例外を処理するための例外クラスが生成されます。

また、hibernatesample.jsf パッケージ内には、エンティティークラスごとに JSF コンバータとコントローラクラスが作成されます。各 JSF コンバータクラスは、JavaServer Faces で定義されている javax.faces.convert.Converter インタフェースを実装し、対応するエンティティークラスのインスタンスと文字列型のオブジェクトの間の変換を行います。hibernatesample.jsf.util パッケージ内には、JSF コントローラによって使用される汎用の JSF ロジックを含む 3 つのユーティリティークラスが生成されます。

プロジェクト内で生成されたクラスのスクリーンショット

「Web ページ」ノードを展開すると、エンティティークラスごとにフォルダが生成されたことがわかります。各フォルダには、Detail.jspEdit.jspList.jsp、および New.jsp の各ファイルが含まれます。welcomeJSF.jsp も変更され、各 List.jsp ページへのリンクが挿入されています。

「構成ファイル」ノードを展開し、faces-config.xml を XML エディタで開くと、コントローラおよびコンバータクラスごとに管理対象 Bean とコンバータ要素が挿入されたことがわかります。また、アプリケーションを JSP にナビゲートさせる論理的な結果を示すナビゲーション規則要素も JSP ごとに挿入されています。

JSF ページを作成し、コントローラクラス内のコードを変更すると、アプリケーションを実行し、テストできるようになります。

プロジェクトのテスト

ここで、プロジェクトを実行して、アプリケーションが正しく機能しているかどうかをテストする必要があります。

  1. プロジェクトを右クリックし、「プロジェクトの実行」を選択します。アプリケーションサーバーが起動し、アプリケーションが構築および配備され、外部 Web ブラウザに welcomeJSF.jsp が表示されます。
  2. 「Show All Customer Items」リンクをクリックすると、次の Web ページが表示されます。
    顧客が一覧表示された Web ページのスクリーンショット
  3. 顧客を作成するには、「New Customer」リンクを使用します。次に、「サービス」ウィンドウでアプリケーションサーバーノードを右クリックし、「サーバーログを表示」を選択して、サーバーログを確認します。サーバーログには、顧客を作成するための SQL が一覧表示されるはずです。


次の手順

NetBeans IDE 6.5 による Hibernate と Java Persistence API を使用した Web アプリケーションの開発については、次のリソースを参照してください。

メーリングリストに登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。