クエリ メソッドと EJB QL

Workshop は、find および select メソッドをエンティティ Bean により簡単に追加するためのアノテーションをサポートしています。WebLogic Server に付属の EJBGen ツールでこれらのアノテーションを使用したことがあるユーザもいることでしょう。このトピックでは、find および select メソッドと EJB QL の概要について説明します。アノテーションの詳細については、「EJBGen リファレンス」を参照してください。

CMP (2.0) エンティティ Bean の find メソッドおよび select メソッドは、EJB QL を使用して定義されます。このクエリ言語は、リレーショナル データベースで使用される SQL に似ており、1 つまたは複数のエンティティ EJB またはエンティティ Bean フィールドを選択する場合に使用されます。Workshop および WebLogic Server では、EJB QL 2.0 が完全にサポートされており、EJB QL と組み合わせて使用できる数多くの追加メソッドが用意されています。

EJBGen アノテーションを使用しない場合、これらのクエリ メソッドは一般にメソッド宣言の組み合わせと Bean のデプロイメント記述子を使用して指定します。アノテーションで指定する値を通して、Workshop は記述子を更新し、Bean インタフェースに必要なメソッド宣言を生成します。

注意 :EJB QL は、EJB コンテナによって自動的に生成される findByPrimaryKey を除く、すべてのクエリ メソッドに対して使用できます。

この節のトピックは、以下のとおりです。

find メソッドの指定

find メソッドは、CMP エンティティ Bean のローカルまたはリモート ホーム インタフェースで他の EJB またはクライアント アプリケーションによって呼び出され、クエリに一致するエンティティ Bean の 1 つまたは複数のインスタンスへのローカルまたはリモートの参照を返します。findByPrimaryKey などの find メソッドは、単一のエンティティ インスタンスへの参照、または java.util.Collection として返される複数のエンティティ インスタンスへの参照を返します。find メソッドは、find というプレフィックスで始まる必要があります。

Workshop では、find メソッドはクラス宣言での @Finder アノテーションを使用して指定します。@Finder アノテーションの中では複数の find メソッドをまとめて指定できます。@Finder アノテーションの属性を通して、クエリ メソッドの特徴を指定します。基本的な特徴には、使用するクエリ言語 (EJB QL または WebLogic QL)、メソッドが宣言されるインタフェース (ローカルまたはリモート ホーム)、メソッドの Java シグネチャなどがあります。

次の例では、ItemsBean_F エンティティ Bean の中で宣言された 2 つの find メソッドを示します。どちらのメソッドも EJB QL を使用し、Bean のローカル ホーム インタフェースに追加されます。

@Finders( {
        @Finder(ejbQl = "SELECT OBJECT(o) from ItemsBean_F as o " +
                "WHERE o.itemname = ?1", 
                generateOn = Finder.GenerateOn.LOCAL, 
                signature = "Collection findByItemName(java.lang.String itemname)"),
        @Finder(ejbQl = "SELECT OBJECT(i) from ManufacturerBean_F as o, " +
                "IN(o.items) AS i WHERE o.usManufacturer = 1", 
                generateOn = Finder.GenerateOn.LOCAL, 
                signature = "Collection findByUSManufacturer()")
})

注意 : @Finder アノテーションの詳細については、「EJBGen リファレンス」の「weblogic.ejbgen.Finder」を参照してください。

IDE では、[プロパティ] ビューを使用してアノテーションの値を表示および設定できます。そのためには、次の基本的な手順に従います。

  1. ソース コードが表示されている状態で、Bean のクラス宣言にカーソルを合わせます。

  2. [プロパティ] ビューで、Finders アノテーションがリストされている場所までスクロールし、右クリックして、[アノテーションの追加] をクリックします。

    @Finders アノテーションは、ソース コードに書き出されます。

  3. カーソルをクラス宣言または新しい @Finders アノテーションに合わせた状態で、[プロパティ] ビューで Finders を右クリックし、[メンバー weblogic.ejbgen.Finder の追加] をクリックします。

    @Finders アノテーションは、ソース コードに書き出されます。[プロパティ] ビューのすべての Finders 属性値はデフォルトの UNSPECIFIED 値に設定されます。

  4. [プロパティ] ビューでは、Finders アノテーション値は [値] カラムで設定します。

find メソッドの例

次のリストでは、find メソッドでの EJB QL クエリの一般的な使い方を示します。

select メソッド

選択メソッドは、EJB QL を使用して定義され、エンティティ Bean への (ローカルまたはリモート) 参照、または個々の CMP フィールドの値への参照を返します。select メソッドは、EJB のインタフェースで定義されません。つまり、このメソッドは、CMP エンティティ Bean クラスによって内部的に使用されるだけのプライベート メソッドです。オブジェクト参照を返す場合、select メソッドは、単一のエンティティ インスタンスへの参照、または java.util.Collectionjava.util.Set として返される複数のエンティティ インスタンスへの参照を返すことができます。選択メソッドは、ejbSelect というプレフィックスで始まる必要があります。

Workshop では、select メソッドの指定は、その宣言を Bean クラスに追加し、@Select アノテーションをそのメソッドに追加することによって行います。@Finder アノテーションと同様、@Select アノテーションの属性を使用すると、クエリ メソッドの特徴 (使用する言語など) を指定できます。

次の例では、ItemsBean_S エンティティ Bean の中で宣言された select メソッドを示します。このメソッドでは EJB QL が使用されます。

@Select(ejbQl = "SELECT OBJECT(o) from ItemsBean_S as o")
public abstract java.util.Collection ejbSelectAll() throws FinderException;

注意 : @Select アノテーションの詳細については、「EJBGen リファレンス」の「weblogic.ejbgen.Select」を参照してください。

IDE では、[プロパティ] ビューを使用して @Select アノテーションの値を表示および設定できます。そのためには、前述した find メソッドの追加と同じ手順を行います (ただしカーソルはメソッド宣言に合わせます)。

select メソッドの例

次のリストでは、select メソッドでの EJB QL クエリの一般的な使い方を示します。

標準の EJB QL 演算子

EJB QL 2.0 では、数多くの標準演算子が定義されています。INDISTINCT のような演算子の一部と、EJB の CMP フィールドへのアクセスなどに使用するナビゲーション演算子としての「.」の使用については、前述の節で説明済みです。その他の演算子には以下のものがあります。

EJB QL クエリと、この言語で定義されている演算子の詳細については、ファインダ メソッドのサンプルと選択メソッドのサンプル、またはお好きな J2EE ドキュメントを参照してください。

関連トピック

weblogic.ejbgen.Finder

weblogic.ejbgen.Select


さらにヘルプが必要ですか。質問は Workshop ニュース グループまでお寄せください。