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を使わないようにすることも可能です。