SHINN::Scribble

2007.09.15

Hibernate 3 でネイティブ SQL  はてなブックマーク - Hibernate 3 でネイティブ SQL

Hibernate は,テーブルやビューに対応した Java クラスを生成して自動的にマッピングしてくれますが,あからじめテーブルやビューを用意できず,実行時に問い合わせを行って結果が欲しい時もあります。

そういう状況に陥って困っていたのですが,調べたところネイティブな SQL 文を実行して結果を取得することが可能でした。

まず,SQL 文を指定して SQLQuery を生成します。

SQLQuery query = session.createSQLQuery(
    "SELECT" +
    "  XXXX AS user_id," +
    "  XXXX AS age," +
    "  XXXX AS full_name " +
    "FROM XXXX"
    );

次は列ごとに返されるデータの型を指定します。これを行わなくても動作しますが,誤った型にマッピングされる場合があるので,指定する方が無難に感じます。

query.addScalar("user_id",
    new org.hibernate.type.StringType());
query.addScalar("age",
    new org.hibernate.type.IntegerType());
query.addScalar("full_name",
    new org.hibernate.type.StringType());

あとはリストを要求すれば結果が得られます。ただしリスト中のデータは Object 型なので,先ほど指定した型にキャストしてアクセスします。

Iterator it = query.list().iterator();

while (it.hasNext()) {
    Object[] row = (Object[])it.next();

    String uid = (String)row[0];
    int age = ((Integer)row[1]).intValue();
    String name = (String)row[2];
    ・・・・
}

このように,Hibernate 経由で自由に SQL 文を発行して結果を得られますが,こういう使い方をすると Hibernate を使う意味が薄れますね。

TrackBackshttp://shinn.boo.jp/mt/mt-tb.cgi/429

Comments

コメントをどうぞ




保存しますか?


 
Mail,メール  twitter,フォロー  RSS,フィード

CATEGORIES

DOWNLOADS

COCOMEISTER

ココマイスターのバッグ

 

    この日記のはてなブックマーク数  Powered by Movable Type 3.33-ja   blogram投票ボタン