連載
» 2004年09月22日 00時00分 公開

SQLに似たHQLでリレーショナルデータを柔軟に検索Hibernateで理解するO/Rマッピング(5)(2/2 ページ)

[山本大,株式会社クロノス]
前のページへ 1|2       

Hibernate Query Language(HQL)

 HibernateはHQLというクエリを扱うことで、非常に柔軟な検索にも対応することができます。HQLはSQLによく似たクエリ言語なので、新たに言語を覚え直すという手間はほとんどありません。HQLは特殊な言語としてゼロから作られたものではなくSQLをオブジェクト指向風に少しラップしただけの言語といえます。そのためにSQLの柔軟性や機能を損なうことなく実行できるのです。

 先ほど実行したサンプル中でも1つHQLを使用しています。

        List list = session.find(" FROM WorkGroup ");

 "FROM WorkGroup"と記述している部分がHQLです。このクエリによってマッピングファイルでWorkGroupクラスにマッピングされたデータを取得できます。

 Entityクラスの指定は「クラス名のみ」の省略形での指定と「パッケージ名から」の完全修飾名での指定ができます。

Many-to-oneリレーション

 サンプルではWorkGroupを主体とした検索を行いましたので、「1対多」のリレーションによる検索を行うことができました。同じサンプルを使用してMemberを主体として検索を行うと「多対1」の検索を行うことができます。「多対1」のリレーションイメージは以下のようになります。

条件文の付与

 HQLではWhere句による条件設定をはじめ、Group By〜やOrder By〜、サブクエリなど、SQLで実現できる多くの操作が実行可能です。

 以下は、Where句条件を追加して検索する場合のHQLです。

HQLを使ったJoinの指定

 HQLでは、次の例のような結合式を記述することによって、より明確に結合式を記述できます。いままでのHQLサンプルではSelect句を省略していました。この例で示すようにSelect句にはFrom句オブジェクトやプロパティ名を記述することが可能です。

        Select mem
From Member as mem inner join 
    mem.workGroup as grp

 また、以下の例のようにFetch句を追加することでObject配列にラップされないようにすることも可能です。

        Select mem
From Member as mem inner join fetch
    mem.workGroup as grp

 今回は、Hibernateを使ったオブジェクトのリレーショナルデータ処理を見てきました。リレーショナルデータの処理はデータベースを使用するアプリケーションを開発するうえで非常に重要な処理です。

 Hibernateはデータ検索においても柔軟性を重視した設計となっており、リレーショナルデータベースの柔軟性を最大に活用するためにHQLを提供しています。この検索処理の柔軟性とパフォーマンスがアプリケーションの性能を決め、検索処理の容易さが開発の容易さの一部を担うことになります。

 次回は、HibernateとEntity Bean、JDBCのそれぞれのパフォーマンスを比較してみましょう。

筆者紹介

株式会社クロノス

山本 大(やまもと だい)

株式会社クロノスに勤務するITアーキテクト。甲南大学 経営学部 卒業。J2EE、.NETにこだわらずベストソリューションを提供できるマルチプラットフォームアーキテクトを目指す。『XMLマスター教科書 プロフェッショナル』(翔泳社)や雑誌などで執筆活動も行っている。



前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。