Nhibernate-hibernate-query-language
提供:Dev Guides
NHibernate-Hibernateクエリ言語
この章では、Hibernate Query Languageについて説明します。 HQLは、JavaのHibernateとNHibernateの両方で共有されます。
- これは Criteria とともに最も古いクエリメカニズムです。
- それは非常に早く実装され、文字列ベースのクエリ API です。
- ISession CreateQuery を介してアクセスします。これは、SQLとほぼ同じです。
- 同じキーワードの多くを使用しますが、構文は単純化されています。
- これは最も一般的な例の1つです。クエリの実行方法を探している場合、HQLの例がよく見られます。
以下はHQLの簡単な例です-
- ここで、顧客からCを選択していることがわかります。SQLによく似ています。 これはNHibernateに関する限り不透明な文字列なので、これが実行時まで有効なHQLであるかどうかはわかりませんが、これは欠点の1つです。
- LINQプロバイダーの強みの1つは、コンパイル時のサポートを取得できることです。 *しかし、HQLは、頻繁に使用される最も柔軟なクエリメカニズムの1つです。 他に方法がない場合は、HQLでそれを行う方法があると言われています。
代わりにHQLを使用してLINQクエリを再作成する簡単な例を見てみましょう。* session.CreateQuery *を呼び出してHQLにアクセスし、HQL文字列を使用してパラメーターとして渡すことができます。
- このHQL文字列はSQLによく似ていますが、主な違いはFirstNameが列名ではなくプロパティ名であることです。
- したがって、2つの間に矛盾がある場合は、プロパティ名を使用します。 同じことは、テーブル名のように見えますが、実際には、選択するクラスの名前です。
- バックエンドテーブルの名前がCustomersである場合、HQLクエリでCustomerを使用します。
このアプリケーションを実行してみましょう。次の出力が表示されます。
HQLを使用してFirstNameが文字Hで始まるすべての顧客を取得する別の簡単な例を見てみましょう。
アプリケーションを再度実行してみましょう。名前がHで始まるすべての顧客がこのクエリから返されることがわかります。
注文数が9を超える顧客すべての注文が必要になるなど、より複雑なことを行うことができます。 以下は同じものに対するHQLクエリです。
また、ここでサイズまたはカウントまたは長さが必要であることを示す必要があります。 HQLには、上記の特別なサイズの方法を使用するオプションがあります。
これを記述する別の方法は、必要に応じて c.Orders.size であり、これは正確な効果があります。
このアプリケーションを実行しましょう。
9件以上の注文があるすべての顧客がデータベースから取得されていることがわかります。