WebSphere Application Server, Version 6.0.x   
             オペレーティング・システム: AIX , HP-UX, Linux, Solaris, Windows

             目次と検索結果のパーソナライズ化

例: EJB での照会

ここでは、Enterprise JavaBeans (EJB) スキーマの例と、 照会の例のセットを紹介します。

表 1. DeptBean スキーマ
Entity Bean 名 (EJB 名) DeptEJB (照会では使用されません)
抽象スキーマ名 DeptBean
インプリメンテーション・クラス com.acme.hr.deptBean (照会では使用されません)
永続属性 (cmp フィールド)
  • deptno - 整数 (キー)
  • name - ストリング
  • budget - BigDecimal
関係
  • emps - 1 対多 (EmpEJB あり)
  • mgr - 多対 1 (EmpEJB あり)
表 2. EmpBean スキーマ
Entity Bean 名 (EJB 名) EmpEJB (照会では使用されません)
抽象スキーマ名 EmpBean
インプリメンテーション・クラス com.acme.hr.empBean (照会では使用されません)
永続属性 (cmp フィールド)
  • empid - 整数 (キー)
  • name - ストリング
  • salary - BigDecimal
  • bonus - BigDecimal
  • hireDate - java.sql.Date
  • birthDate - java.util.Calendar
  • address - com.acme.hr.Address
関係
  • dept - 多対 1 (DeptEJB あり)
  • manages - 1 対多 (DeptEJB あり)
Address は、EmpBean で cmp フィールドとして使用されるシリアライズ可能オブジェクトです。 Address の定義は、次のとおりです。
    public class com.acme.hr.Address  extends Object implements Serializable {
	public String street;
	public String state;
    public String city;
	public Integer zip;
      public double distance (String start_location) { ... } ;
      public  String format ( ) { ... } ;
 }
下記の照会は、すべての部門を戻します。
SELECT OBJECT(d) FROM DeptBean d
下記の照会は、名前が「Web」で始まる部門を戻します。 下記は、結果を名前でソートします。
SELECT OBJECT(d) FROM DeptBean d WHERE  d.name LIKE  'Web%' ORDER BY d.name
キーワード SELECT および FROM は、この例では大文字で表示されますが、 大/小文字の区別はありません。 照会で使用される名前が予約語の場合、その名前を照会で使用する場合は、二重引用符で囲む必要があります。 反転された語句のリストは、EJB 照会: 予約語 で検索できます。二重引用符で囲まれている ID は大/小文字の区別があります。 下記の例は、予約語である cmp フィールドの使用方法を示しています。
SELECT OBJECT(d) FROM DeptBean d  WHERE  d."select" > 5
下記の照会は、Bob が管理する従業員をすべて戻します。 下記の例は、パス式を使用して関係をナビゲートする方法を示しています。
SELECT OBJECT (e) FROM EmpBean e WHERE e.dept.mgr.name='Bob'
照会には、finder または select メソッドの対応する値を参照するパラメーターを含めることができます。 照会パラメーターには、次のように 1 から始まる番号が付けられています。
SELECT OBJECT (e) FROM EmpBean e WHERE e.dept.mgr.name= ?1
下記の照会は、多値の関係のナビゲーションを示しており、 1 人で 50000 以上 90000 以下の報酬を得ている従業員がいる部門をすべて戻します。
SELECT OBJECT(d) FROM DeptBean d,  IN (d.emps) AS e
WHERE e.salary BETWEEN 50000 and 90000

この照会には、 各部門オブジェクトとそれに関連する従業員のコレクションとの間に結合操作が暗黙指定されています。 部門に従業員がいない場合は、その部門は結果に表示されません。 部門に 50000 より多くの報酬を得ている従業員が複数いる場合は、 その部門は、結果に複数回表示されます。

下記の照会は、重複する部門を除去します。
SELECT DISTINCT OBJECT(d) from DeptBean d,  IN (d.emps) AS e  WHERE e.salary > 50000
下記は、ボーナスが給料の 40% より多い従業員を検索します。
SELECT OBJECT(e) FROM EmpBean e where e.bonus > 0.40 * e.salary
下記は、部門内の従業員の給料とボーナスの合計が部門の予算を超える部門を検索します。
SELECT OBJECT(d) FROM DeptBean d where d.budget <
( SELECT SUM(e.salary+e.bonus) FROM IN(d.emps) AS e )
java.sql.* データ型 を CMP フィールドとして使用し、 データ・ストアが DB2 の場合は、照会に DB2 スタイルの日時算術式を含めることができます。 下記は、2000 年 1 月 1 日現在で最低 20 年就労した従業員をすべて検索します。
SELECT OBJECT(e) FROM EmpBean e where year(  '2000-01-01' - e.hireDate ) >= 20
データ・ストアが DB2 でない場合、または CMP フィールドとして java.util.Calendar を使用したい場合は、 照会で Java ミリ秒値を使用することができます。 下記の照会は、1990 年 1 月 1 日より前に生まれた従業員をすべて検索します。
SELECT OBJECT(e) FROM EmpBean e WHERE e.birthDate <  631180800232
下記は、従業員のいない部門を検出します。
SELECT OBJECT(d) from DeptBean d where d.emps IS EMPTY
下記は、Bob より報酬を得ている従業員をすべて検索します。
SELECT OBJECT(e) FROM EmpBean e, EmpBean b
WHERE b.name = 'Bob' AND e.salary + e.bonus > b.salary + b.bonus
下記は、最高額のボーナスを得た従業員を検索します。
SELECT OBJECT(e) from EmpBean e  WHERE e.bonus =
(SELECT MAX(e1.bonus) from EmpBean e1)

上記の照会はすべて EJB オブジェクトを戻します。 finder メソッド照会は、必ず、ホームの EJB オブジェクトを戻さなければなりません。 select メソッド照会は、これに加えて、CMP フィールドか、 またはホームに属さないその他の EJB オブジェクトを戻すことができます。

下記は、EmpBean の有効な select メソッド照会です。 各部門のマネージャーを戻します。
SELECT  d.mgr FROM DeptBean d
部門 42 のマネージャー名を戻します。
SELECT  d.mgr.name FROM DeptBean d WHERE  d.deptno = 42
部門 42 の従業員名を戻します。
SELECT e.name FROM EmpBean e WHERE  e.dept.deptno=42
同じ照会を別の方法で作成するには、次のようにします。
SELECT e.name from DeptBean d, IN (d.emps) AS e WHERE d.deptno=42
finder および select 照会は、 SELECT 文節内では単一の CMP フィールドまたは EJBObject のみ許可します。 選択クエリーは Enterprise JavaBeans 2.1 で、SUM、MIN、MAX、AVG、および COUNT を使用して集計値を返すことができます。
SELECT max(e.salary) FROM EmpBean e WHERE e.dept.deptno=42
動的照会 API は、SELECT 文節内では複数の式を許可します。 下記の照会は、有効な動的照会ですが、有効な select または finder 照会ではありません。
SELECT  e.name, e.salary+e.bonus as total_pay , object(e), e.dept.mgr
FROM  EmpBean e
ORDER BY 2
下記の動的照会は、各部門の従業員数を戻します。
SELECT e.dept.deptno as department_number , count(*) as employee_count
FROM  EmpBean e
GROUP BY  by e.dept.deptno
ORDER BY 1
下記の動的照会 API は、 Bean または値オブジェクト・メソッドを含む照会を許可します。
SELECT object(e), e.address.format( )
FROM EmpBean e EmpBean e



関連概念
EJB 照会言語
関連タスク
EJB 照会の使用
動的照会サービスの使用
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 22, 2008 12:07:38 AM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r0/index.jsp?topic=/com.ibm.websphere.base.doc/info/aes/ae/rque_example.html