| Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド | 
			目次
			索引
			![]()  
		 | 
	
| 第3部 EJB編 | > 第10章 EJBサービスの機能 | > 10.2 Entity Beanの実行環境 | 
 EJB QLとは、finderメソッドまたはejbSelectメソッドなど検索メソッドのクエリ文を定義するためのSQL92ベースの言語です。
 一般的に使用するSQLとの最大の違いは、SELECT型にEntity Beanの識別子だけが単独で指定されている場合に指定するOBJECTキーワードです。
 EJB QLは抽象スキーマ名に基づいて記述されるので、特定のデータベースに依存しない互換性があります。抽象スキーマ名は、CMP/CMRフィールドに並んで抽象永続スキーマを構成する重要な構成要素です。
 注) 抽象スキーマ名は、ejb-jar内で一意になるようにしてください。
 EJB QLを使用するには、deployment descriptor内の<query>タグにEJB QL文を記述します。
 EJBアプリケーションのdeployment descriptorの情報が定義されているファイル(ejb-jar.xml)は、XML形式で記述する必要があります。このため、ejb-jar.xmlを編集する場合は、XML形式の仕様に従ってください。
 特に以下の文字については、定義済み実体参照(暗黙定義エンティティ)で記述してください。
 EJB QLが使用できるのは、CMP2.0のEntity Beanです。
ejb-jar.xmlを編集する場合
編集する文字
定義済み実体参照
<
<
>
>
&
&
'
'
"
"
EJB QLでは、EJB規約に準拠した以下が使用できます。
EJB QL文とは、SELECT句、FROM句、WHERE句を使用して1つまたは複数のEJBオブジェクトを検索するクエリ文であり、SELECT句とFROM句の定義は必須です。このEJB QL文はコンテナによって解析され、適切なデータベースクエリ言語に翻訳されます。
返却値の値としてOBJECT(Entity Bean)、またはパス式を使ってCMF、CMRフィールドを指定します。
EJBアプリケーションのクラス名ではなく、Entity Bean内に記述された一意の“抽象スキーマ名”を指定します。
検索条件の指定を行います。例えば ?1は、検索メソッドのパラメタの1番目を意味します。
Entity Beanの検索メソッドにはfinderメソッド、またはejbSelectメソッドがあります。それぞれの検索メソッドにおいてメソッド名、パラメタの型を指定してください。
また、メソッドの返却値の型をマッピングするために、結果のタイプにLocalまたはRemote要素を指定します。デフォルト値はLocalです。
EJB QLおよびEJB QL拡張で使用できる機能は、以下です。
| 
 EJB QL構文  | 
 基本  | 
 拡張  | 
 説明  | 
||
|---|---|---|---|---|---|
| 
 データ操作文  | 
 SELECT句  | 
 ○  | 
 ○  | 
 クエリに返却するオブジェクトまたは値を指定します。  | 
|
| 
 FROM句  | 
 ○  | 
 ○  | 
 SELECT句およびWHERE句内で指定した値の取得場所を指定します。  | 
||
| 
 WHERE句  | 
 ○  | 
 ○  | 
 クエリによって返却される値を制限するための条件を指定します。  | 
||
| 
 ORDER BY句  | 
 ×  | 
 ○  | 
 クエリによって返却される結果をソートします。  | 
||
| 
 SELECT句の返却値  | 
 パス式(CMF/CMR)  | 
 ○  | 
 ○  | 
 単一またはコレクションの値を持つ式です。  | 
|
| 
 OBJECT(Entity Bean)  | 
 ○  | 
 ○  | 
 SELECT句にEntity Beanの識別子だけが単独で指定されている場合に指定します。  | 
||
| 
 集合関数  | 
 MAX  | 
 ×  | 
 ○  | 
 集合で一番大きな値を返却します。  | 
|
| 
 MIN  | 
 ×  | 
 ○  | 
 集合で一番小さな値を返却します。  | 
||
| 
 SUM  | 
 ×  | 
 ○  | 
 集合の合計値を返却します。  | 
||
| 
 AVG  | 
 ×  | 
 ○  | 
 集合の平均値を返却します。  | 
||
| 
 COUNT  | 
 ×  | 
 ○  | 
 集合の要素数を返却します。  | 
||
| 
 条件式  | 
 比較式  | 
 ○  | 
 ○  | 
 指定した2つの値を比較して評価します。  | 
|
| 
 BETWEEN式  | 
 ○  | 
 ○  | 
 値が指定した範囲内に含まれるかを評価します。  | 
||
| 
 LIKE式  | 
 ○  | 
 ○  | 
 LIKEに続く文字列が合致するかを評価します。  | 
||
| 
 IN式  | 
 ○  | 
 ○  | 
 値が含まれているかどうかを評価します。  | 
||
| 
 NULL比較式  | 
 ○  | 
 ○  | 
 値がNULL値かを評価します。  | 
||
| 
 空コレクション比較式 (EMPTY比較式)  | 
 ○  | 
 ○  | 
 コレクション値を持つパス式が要素をもつかを評価します。  | 
||
| 
 コレクションメンバ式 (MEMBER式)  | 
 ○  | 
 ○  | 
 値がコレクションのメンバであるかを評価します。  | 
||
| 
 演算子  | 
 ナビゲーション演算子  | 
 . (ピリオド)  | 
 ○  | 
 ○  | 
 関係を辿るシンボルです。  | 
| 
 算術演算子  | 
 + - (単項)  | 
 ○  | 
 ○  | 
 + : 指定した値は正の値です。  | 
|
| 
 * / (乗算 除算)  | 
 ○  | 
 ○  | 
 * : 指定した値を乗算します。  | 
||
| 
 + - (加算 減算)  | 
 ○  | 
 ○  | 
 + : 指定した値を加算します。  | 
||
| 
 比較演算子  | 
 =  | 
 ○  | 
 ○  | 
 “=”の左辺の値と右辺の値が等しい場合に真となり、等しくない場合に偽となります。  | 
|
| 
 <>  | 
 ○  | 
 ○  | 
 “<>”の左辺の値と右辺の値が等しくない場合に真となり、等しい場合に偽となります。  | 
||
| 
 <  | 
 ○  | 
 ○  | 
 “<”の左辺の値が右辺の値より小さい場合に真となり、大きいまたは等しい場合に偽となります。  | 
||
| 
 >  | 
 ○  | 
 ○  | 
 “>”の左辺の値が右辺の値より大きい場合に真となり、小さいまたは等しい場合に偽となります。  | 
||
| 
 <=  | 
 ○  | 
 ○  | 
 “<=”の左辺の値が右辺の値より小さいまたは等しい場合に真となり、大きい場合に偽となります。  | 
||
| 
 >=  | 
 ○  | 
 ○  | 
 “>=”の左辺の値が右辺の値より大きいまたは等しい場合に真となり、小さい場合に偽となります。  | 
||
| 
 論理演算子  | 
 NOT  | 
 ○  | 
 ○  | 
 “NOT”に導かれる式が真の場合に偽となり、偽の場合には真となります。  | 
|
| 
 AND  | 
 ○  | 
 ○  | 
 “AND”の左辺および右辺が真の場合に真となり、そうでない場合には偽となります。  | 
||
| 
 OR  | 
 ○  | 
 ○  | 
 “OR”の左辺または右辺のいずれかが真の場合に真となり、左辺および右辺が偽の場合には偽となります。  | 
||
| 
 関数式  | 
 文字列式  | 
 CONCAT  | 
 ○  | 
 ○  | 
 引数で与えられた文字列を結合した値を求めます。  | 
| 
 SUBSTRING  | 
 ○  | 
 ○  | 
 指定した文字列の部分列を求めます。  | 
||
| 
 LOCATE  | 
 ○  | 
 ○  | 
 条件に指定した文字列の位置を求めます。  | 
||
| 
 LENGTH  | 
 ○  | 
 ○  | 
 文字数またはバイト数を求めます。  | 
||
| 
 算術式  | 
 ABS  | 
 ○  | 
 ○  | 
 引数に指定した値に対する“絶対値”を求ます。  | 
|
| 
 SQRT  | 
 ○  | 
 ○  | 
 検索条件に指定した値の平方根を求めます。  | 
||
| 
 MOD  | 
 ×  | 
 ○  | 
 検索条件に指定した値の余剰を求めます。  | 
||
○:指定可能 ×:指定不可

 EJB QL基本ではSELECT句、FROM句、WHERE句を使用したデータ操作ができます。また、データを編集して返却する演算子が使用できます。
 より詳細なEJB QLの使用方法については、EJB2.0の規約を参照してください。

 以下に演算子を使用したEJB QL文の例を示します。
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
 すべてのCustomerのCollectionを返します。
 WHERE句がなく識別子が抽象スキーマ1つしか使われないもので、上記のEJB QLの例では、Customerという抽象スキーマから検索します。FROM句の後に抽象スキーマ名(Customer)を指定して、ASの後のcはCustomerをあらわす識別子です(ASは省略可)。
 上記のようにSELECT型にEntity Beanの識別子だけが単独で指定されている場合は、OBJECT()演算子が必須です。
| 
 SELECT c.lastName FROM Customer AS c  | 
 全Customerの姓の、Collectionを返します。
 Customerという抽象スキーマよりCustomerすべての姓を検索するEJB QLの記述です。この例では、OBJECT()演算子は不要です。
 SELECT句はCMPフィールドまたはCMRフィールドも返却できます。
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
 'Fujitsu'という名前のCustomerを返します。
 WHERE句で指定されたリテラル(定数)に一致するBeanを検索するためのEJB QLの記述です。指定したリテラルが文字列リテラルの場合は、シングルクォーテーション(')で囲みます。上記のは、名前がFujitsuであるCustomerを検索するEJB QLの記述です。
【留意事項】
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
 パラメタに指定された名前のCustomer Collectionを返します。
 WHERE句の後に指定したパラメタに対して、疑問符(?)とパラメタが最初(1)から数えて何番目になるかを指定します。上記は、Customerという抽象スキーマからパラメタの名前に指定されたCustomerから検索するEJB QLの記述です。
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
WHERE句では比較式が使用できます。上記の例では比較式(>=)を使用して年齢が25歳以上のCustomerを検索するEJB QLの例を記述します。
【留意事項】
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
 idが100〜200のCustomerのCollectionを返します。
 BETWEEN式(NOT BETWEEN)の使用方法は、SQLと同様です。BETWEEN演算子の指定区間について検索できます。例ではIDが100〜200のCustomerを検索するEJB QLです。
【留意事項】
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
 年齢情報があるCustomerのCollectionを返します。
 NULL比較式演算子は、NULL値の検索に使用します。例えば年齢がNULL値ではないCustomerを検索するEJB QLは上記のように記述します。
EJB QL拡張は、EJB2.0で使用できる機能に加えて以下が拡張されています。
より詳細なEJB QL拡張の使用方法については、EJB2.1の規約を参照してください。

 以下に演算子を使用したEJB QL文の例を示します。
| 
 SELECT c.address.city FROM Customer c  | 
 ORDER BY句を使用して値式にCMFを指定すると、検索結果がソートされます。ORDER BY句には昇順「ASC」か、降順「DESC」を指定できます。省略された場合、昇順になります。
 上記の例では、返却される値をc.address.cityの降順で返却します。
【留意事項】
| 
 SELECT SUM(c.employeeCount)  | 
 集合関数は、値の合計や平均などの集計を行う関数です。
 上記の例では、c.typeが'IT'のものをc.employeeCountの値を合計して返却します。
【留意事項】
| 
 SELECT OBJECT(c) FROM Customer c  | 
MODを使用すると剰余を得ることができます。年齢を10で割った余りを返却します。
【留意事項】
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
 LIKE式の使用方法はSQLと同様です。上記の例では、名前がパターン('Fujitsu_'から始まる)文字列に合致するCustomerを検索するEJB QLの例を記述します。
 パターン文字列は'Fujitsu\_'を指定します。また、エスケープ文字は'\'を指定します。
【留意事項】
| 
 SELECT OBJECT(c) FROM Customer AS c  | 
IN式の使用方法は、SQLと同様です。上記の例では年齢がパラメタで指定した値に合致するCustomerを検索するEJB QLの例を記述します。
【留意事項】
			目次
			索引
			![]()  
		 |