トップ 差分 一覧 ソース ヘルプ RSS ログイン

HibernateIntegration

Hibernateとの連携

 概要

ClickではHibernateとの連携のためにClick Extrasにおいて以下のクラスを提供しています。

  • HibernateForm - Hibernateのエンティティオブジェクトに編集フォームを提供するためのFormコントロールの拡張。
  • SessionContext - HibernateのSessionを取得するためのクラス。SessionFilterで初期化する必要があります。
  • SessionFilter - HibernateのSessionを初期化するためのサーブレットフィルタ。

それでは利用方法を順番に見て行きましょう。

 SessionFilterの設定

SessionContextの初期化およびリクエストごとのセッションのクローズを行います。web.xmlで以下のように設定し、ClickServletにフィルタを適用します。

 SessionContextの使用

SessionContextはデフォルトではクラスパスのルートに存在するhibernate.cfg.xmlをHibernateの設定ファイルとして使用しますが、システムプロパティを使用して初期化を行うことも可能です。SessionContextの初期化コードは以下のようになっています。

SessionContextからはgetSession()というstaticメソッドでHibernateのSessionオブジェクトを取得することができます。SessionはSessionContextの内部においてスレッドごとに管理されており、SessionFilterによってリクエスト処理の終了時に自動的にクローズされます。

 HibernateFormの使用

HibernateFormはHibernateのエンティティオブジェクトから自動的に入力フォームを生成します。必須のプロパティに関してはフィールドのrequiredプロパティが自動的にtrueに設定されます。

以下の例はUserオブジェクトを生成/更新するためのページです。既存のUserオブジェクトを編集する場合、編集対象のオブジェクトをリクエストパラメータとして渡します。それ以外の場合はsaveChanges()メソッドの呼び出しで新しいUserオブジェクトが作成されます。

HibernateFormはオブジェクトのINSERTおよびUPDATEをサポートしています。また、内部ではSessionContext#getSession()メソッドを使用してHibernateのセッションを取得していますが、HibernateFormのgetSession()メソッドをオーバーライドすることでSessionContextを使わないようにすることも可能です。