Interstage Application Server J2EE ユーザーズガイド |
目次
索引
![]() ![]() |
第3部 EJB編 | > 第16章 EJBサービスの基本機能 | > 16.2 Entity Beanの実行環境 |
CMP2.0では、EJB QLというクエリ言語を使用できます。
EJB QLとは、finderメソッドまたはselectメソッドなど検索メソッドのクエリ文を定義するためのSQL92ベースの言語です。
EJB QLは、抽象スキーマ名に基づいて記述されるので、特定のデータベースに依存しない互換性があります。
EJB QLを使用するには、deployment descriptor内の<query>タグにEJB QL文を記述します。
EJB QL文とは、SELECT句、FROM句、WHERE句を使用して1つまたは複数のEJBオブジェクトを検索するクエリ文です。
SELECT句とFROM句の定義は必須です。このEJB QL文はコンテナによって解析され、適切なデータベースクエリ言語に翻訳されます。
以下にそれぞれの句について説明します。
返却値の値としてOBJECT(Entity Bean)、またはパス式を使ってCMF、CMRフィールドを指定できます。
EJBアプリケーションのクラス名ではなく、Entity Bean内に記述された一意の"抽象スキーマ名"を指定します。抽象スキーマ名は、CMP/CMRフィールドに並んで抽象永続スキーマを構成する重要な構成要素です。
検索条件の指定を行います。例えば ?1は、検索メソッドのパラメタの1番目を意味します。
Entity Beanの検索メソッドにはfinderメソッド、またはselectメソッドがあります。それぞれの検索メソッドにおいてメソッド名、パラメタの型を指定してください。
また、メソッドの返却値の型をマッピングするために、結果のタイプにLocalまたはRemote要素を指定します。デフォルト値はLocalです。
EJBアプリケーションのHomeインタフェースに定義され、単一または複数のEJBアプリケーションに対するリファレンスを取得します。
CMP2.0では戻り値が複数の場合の型は、java.util.Collection型だけサポートされています(java.util.EnumerationはCMP1.1およびBMPではサポートされています)。
EJBアプリケーション内部でだけ使用できるプライベートメソッドです。
selectメソッドを使用してCMFやCMRフィールドの値や、Local/Remoteインタフェースを取得できます。
また、ejbHomeメソッドやビジネスメソッドからも呼び出せることにより、finderメソッドよりも柔軟性に優れていますが、HomeインタフェースではなくEnterprise Beanクラスで抽象メソッドとして定義されるので、クライアントには公開されません(クライアントから呼出すことができません)。
CMP2.0では戻り値が複数の場合の型は、java.util.Collection型だけサポートされています(java.util.Set型は現在未サポートです)。
以下にEJB QLで使用できる演算子を示します。
SELECT、 FROM、 WHERE、 DISTINCT、 OBJECT、 NULL、 TRUE、 FALSE、 NOT、 AND、 OR、 BETWEEN、 LIKE、 IN、 AS、 UNKNOWN、 EMPTY、 MEMBER、OF、 IS |
一般的に使用するSQLとの最大の違いは、SELECT型にEntity Beanの識別子だけが単独で指定されている場合に指定するOBJECTキーワードです。
演算子を使用したEJB QL文の例です。
WHERE句がなく識別子が抽象スキーマ1つしか使われないもので、以下のEJB QLの例では、Customerという抽象スキーマから検索します。FROM句の後に抽象スキーマ名(Customer)を指定して、ASの後のcはCustomerを表す識別子です(AS は省略可)。
下記のようにSELECT型にEntity Beanの識別子だけが単独で指定されている場合は、OBJECT()演算子が必須です。
SELECT OBJECT (c) FROM Customer AS c |
すべてのCustomerのCollectionを返します。
例2では、Customerという抽象スキーマよりCustomerすべての姓を検索するEJB QLを記述します。この例では、OBJECT()演算子は不要です。
SELECT句はCMPフィールドまたはCMRフィールドも返却できます。
SELECT c.lastName FROM Customer AS c |
すべてのCustomerの姓の、Collectionを返します。
FROM句で検索された値に対しWHERE句を使用して、いろいろな条件テストが指定できます。
WHERE句の後に指定したパラメタに対して、疑問符(?) とパラメタが最初 (1) から数えて何番目になるかを指定します。以下のEJB QLの例では、Customerという抽象スキーマからパラメタの名前に指定されたCustomerから検索するEJB QLの記述です。
SELECT OBJECT(c) FROM Customer AS c |
パラメタに指定された名前のCustomer Collectionを返します。
WHERE句で指定されたリテラル(定数)に一致するBeanを検索するためのEJB QLの記述です。指定したリテラルはシングルクォーテーション(‘)で囲みます。この例では名前がFujitsuであるCustomerを検索するEJB QLです。
SELECT OBJECT(c) FROM Customer AS c |
'Fujitsu'という名前のCustomerを返します。
WHERE句で算術演算子(+, -, *, /, <>, =)を使用することができます。以下の例では算術演算子(>)を使用して年齢が25歳以上のCustomerを検索するたEJB QLの例を記述します。
SELECT OBJECT(c) FROM Customer AS c |
'Fujitsu'という名前のCustomerを返します。
BETWEEN(NOT BETWEEN)演算子の使用方法はSQLと同様にBETWEEN演算子の指定区間について検索することができます。例ではIDが100〜200のCustomerを検索するEJB QLです。
SELECT OBJECT(c) FROM Customer AS c |
IDが100〜200のCustomerのCollectionを返します。
IS NULL(IS NOT NULL)演算子は、NULL値の検索に使用します。例えば年齢がNULL値ではないCustomerを検索するEJB QLは次のように記述します。
SELECT OBJECT(c) FROM Customer AS c |
年齢情報があるCustomerのCollectionを返します。
より詳細なEJB QLの使用方法については、EJB2.0の仕様書を参照してください。
目次
索引
![]() ![]() |