Hibernate HQLクエリ - 戻り値をnew mapでMap型に

2008/09/12 21:21Update
TAGS: Hibernate | HQLクエリ | map

データベースに問い合わせを行う際、戻り値のコレクションに含める要素をMap型にしたいときがあります。こんなとき、Hibernate HQLクエリの場合、new mapを使います。

使い方


例1:
select new map(t1.c1, t2.c2) from TableEntity1 t1 ,TableEntity2 t2 where ...

例2:
select new map('Hello', 100, c.id, c.name) from Cat c where ...

※new mapに指定できる項目は数に限りがありません。
※項目に、エンティティのプロパティ名や文字列、数字などを指定することが可能です。
※Mapの(key, value)は("0,1,2..", "項目値1,項目値2,項目値3,..")のようになります。


サンプル


Hibernate HQLのnew mapについて使ってみます。

◇FATHERテーブル
ID    NAME    
1    f01
2    f02    

※FATHERに対応するエンティティやマッピングの定義をここで省きます。

◇テストコード(抜粋)
    public static void testHqlNewMap(Session sess) {
        String hql = "select new map('Hello', 100, f.id, f.name) from Father f where f.name like 'f%'";
        
        Query query = sess.createQuery(hql);
        List <Map> mapList = query.list();
        
        for (Map map: mapList) {
            System.out.println("==========");
            
            Set keySet = map.keySet();
            for (Iterator ite = keySet.iterator(); ite.hasNext();) {
                String key = (String)ite.next();
                Object value = map.get(key);
                System.out.println(key + "=" + value);    
            }
        }
    }

    
◇実行ログ
Hibernate: select 'Hello' as col_0_0_, 100 as col_1_0_, father0_.ID as col_2_0_, father0_.NAME as col_3_0_ from FATHER father0_ where father0_.NAME like 'f%'
==========
3=f01
2=1
0=Hello
1=100
==========
3=f02
2=2
0=Hello
1=100

有关作者
Syboos.jp編集長AJavaやオープンソース情報の執筆、Webサイトの開発や運営全般の業務に携わる。

Sponsored Link


Comments

用户名 (required)

Email (will not be published) (required)

URL

Evaluation