Hibernate フィルタによるデータ抽出

2009/06/11 14:56Update
TAGS: Hibernate | セッション | Session | filter | フィルタ | enableFilter | クエリ | データ抽出

Hibernate フィルタによるデータの抽出方法について。

Hibernateフィルタの使い方


1)フィルタを定義
Hibernateフィルタを利用するのに、Hibernateの定義ファイルにそのフィルタを定義する必要があります。
例:
<hibernate-mapping>
    <filter-def name="myFilter">
        <filter-param name="myFilterParam" type="string"/>
    </filter-def>
</hibernate-mapping>

※<hibernate-mapping>要素内に、<filter-def/>を定義します。
※<filter-def>要素はフィルタを定義します。nameはフィルタの名前を指定します。
※<filter-param>要素はフィルタのパラメータを定義します。nameはパラメータの名前で、typeはパラメータの型になります。

2)フィルタとクラスやコレクションの結びつき
クラスの場合。例:
<class name="MyClass" ...>
 ...
 <filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</class>


コレクションの場合。例:
<set name="mySet" ...>
    <filter name="myFilter" condition=":myFilterParam = MY_FILTERED_COLUMN"/>
</set>


※<filter>要素は利用したいフィルタを記述します。
※<filter>要素のnameにフィルタの名前を指定します。
※<filter>要素のconditionにSQL文のWHERE句に相当するフィルタの条件を指定します。
 「:myFilterParam」:myFilterParamは<filter-def>による定義済みのフィルタのパラメータ名です。
 「MY_FILTERED_COLUMN」:テーブルのフィールド名

3)Hibernateクエリによるフィルタリング

Hibernate 3.xから、org.hibernate.Filterというインタフェースが追加され、セッション処理関連のorg.hibernate.Sessionインタフェースにも以下のようなフィルタ関連のメソッドが追加されました。
Filter     enableFilter(String filterName)
void     disableFilter(String filterName)
Filter     getEnabledFilter(String filterName)

デフォルトでは、フィルタが定義されても反映されないので、フィルタを有効にするために、Sessionの
Filter     enableFilter(String filterName)
メソッドによる明示的なコールが必要です。

例:
//①フィルタの有効化・フィルタ条件の設定
session.enableFilter("myFilter").setParameter("myFilterParam", "some-value");

//②通常のクエリ処理
//クエリによるデータ取得
List results = session.createQuery("...").list();

//データ取得
MyClass myClass = session.get(MyClass.class, id);
Set myClassSet = myClass.getMySet();        //フィルタリングされた後のコレクションになります


参考資料


org.hibernate.Filterインタフェース API doc
org.hibernate.Session インタフェース API doc

有关作者
Syboos.jp編集長システム設計や開発、保守運営などを行ってます。オープンソース技術に興味があります。

Sponsored Link


Comments