検索
連載

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

O/Rマッピングは、従来の煩雑なデータベースに関する処理の記述をスマートにし、柔軟なアプリケーションの構築を可能にします。本連載ではオープンソースのO/Rマッピングフレームワーク「Hibernate」を用いてO/Rマッピングの基礎を解説します。そしてさらに、J2EEアプリケーションへの実践的な適用方法とそのメリットも紹介していきます。(編集局)

PC用表示 関連情報
Share
Tweet
LINE
Hatena
前のページへ |       

Hibernate Query Language(HQL)

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

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 "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句オブジェクトやプロパティ名を記述することが可能です。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

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

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

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

筆者紹介

株式会社クロノス

山本 大(やまもと だい)

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



Copyright © ITmedia, Inc. All Rights Reserved.

前のページへ |       
ページトップに戻る