Hibernate-query-language
Hibernate-クエリ言語
Hibernate Query Language(HQL)はSQLに似たオブジェクト指向のクエリ言語ですが、HQLはテーブルと列を操作する代わりに、永続オブジェクトとそのプロパティを操作します。 HQLクエリは、Hibernateによって従来のSQLクエリに変換され、データベースでアクションを実行します。
ネイティブSQLを使用してSQLステートメントをHibernateで直接使用できますが、データベースの移植性の面倒を避け、HibernateのSQL生成およびキャッシュ戦略を活用するために、可能な限りHQLを使用することをお勧めします。
SELECT、FROM、WHEREなどのキーワードでは大文字と小文字は区別されませんが、HQLではテーブル名や列名などのプロパティでは大文字と小文字が区別されます。
FROM句
完全な永続オブジェクトをメモリにロードする場合は、 FROM 句を使用します。 以下は、FROM句を使用する簡単な構文です-
HQLでクラス名を完全に修飾する必要がある場合は、次のようにパッケージとクラス名を指定するだけです-
AS句
特に長いクエリがある場合、 AS 句を使用して、HQLクエリのクラスにエイリアスを割り当てることができます。 たとえば、前の単純な例は次のようになります-
SELECT句
ここで注目すべきは、 Employee.firstName がEMPLOYEEテーブルのフィールドではなく、Employeeオブジェクトのプロパティであることです。
WHERE句
ストレージから返される特定のオブジェクトを絞り込む場合は、WHERE句を使用します。 以下は、WHERE句を使用する簡単な構文です-
ORDER BY句
HQLクエリの結果を並べ替えるには、 ORDER BY 句を使用する必要があります。 結果セット内のオブジェクトのプロパティごとに、昇順(ASC)または降順(DESC)で結果を並べ替えることができます。 以下は、ORDER BY句を使用する簡単な構文です-
あなたが複数のプロパティでソートしたい場合は、次のようにコンマで区切られた追加のプロパティをorder by句の最後に追加するだけです-
GROUP BY句
この句により、Hibernateはデータベースから情報を取得し、属性の値に基づいてグループ化し、通常は結果を使用して集計値を含めます。 GROUP BY句を使用する簡単な構文は次のとおりです-
名前付きパラメーターの使用
Hibernateは、HQLクエリで名前付きパラメーターをサポートします。 これにより、ユーザーからの入力を受け入れるHQLクエリを簡単に作成でき、SQLインジェクション攻撃から保護する必要はありません。 以下は、名前付きパラメータを使用する簡単な構文です-
UPDATE句
一括更新は、Hibernate 3でのHQLの新機能であり、Hibernate 3での削除作業はHibernate 2での削除作業とは異なります。 Queryインターフェースには、HQL UPDATEまたはDELETEステートメントを実行するためのexecuteUpdate()というメソッドが含まれています。
DELETE句
INSERT句
HQLは、あるオブジェクトから別のオブジェクトにレコードを挿入できる場合にのみ、 INSERT INTO 句をサポートします。 以下は、INSERT INTO句を使用する単純な構文です-
集計メソッド
HQLは、SQLと同様に、さまざまな集計メソッドをサポートしています。 それらはSQLと同じようにHQLで機能し、以下は利用可能な関数のリストです-
Sr.No. | Functions & Description |
---|---|
1 |
avg(property name) プロパティの値の平均 |
2 |
count(property name or *) 結果でプロパティが発生する回数 |
3 |
max(property name) プロパティ値の最大値 |
4 |
min(property name) プロパティ値の最小値 |
5 |
sum(property name) プロパティ値の合計 |
クエリを使用したページネーション
ページ付けのためのQueryインターフェースには2つのメソッドがあります。
Sr.No. | Method & Description |
---|---|
1 |
Query setFirstResult(int startPosition) このメソッドは、結果セットの行0から始まる最初の行を表す整数を受け取ります。 |
2 |
Query setMaxResults(int maxResult) このメソッドは、オブジェクトの固定数 maxResults を取得するようにHibernateに指示します。 |
上記の2つの方法を一緒に使用して、WebアプリケーションまたはSwingアプリケーションでページングコンポーネントを構築できます。 以下は、一度に10行をフェッチするように拡張できる例です-