30.6. クエリ

エンティティ beans は 2 種類のクエリに対応します。finders と selects です。finder は bean のクライアントに対するエンティティ bean でクエリを行います。select メソッドは、エンティティ実装に対するプライベートのクエリステートメントを提供するよう作られています。定義されたホームインターフェースと同じタイプのエンティティの検索のみに制限される finder とは異なり、select メソッドはどんなタイプのエンティティでも、あるいはエンティティの一つのフィールドだけでも返します。EJB-QL はプラットフォーム固有の方法で finder、および select メソッドを指定するクエリ言語です。

30.6.1. Finder と Select 宣言

finder の宣言は CMP 2.0 でも変わりません。finder はエンティティのホームインターフェース(ローカル、またはリモート)で宣言します。ローカルホームインターフェースで定義された finder は RemoteException を送出しないように設定されています。以下のコードは GangsterHome インターフェースで findBadDudes_ejbql finder を宣言します。ejbql 接尾辞はここでは必要ありません。これは単に、異なるタイプのクエリ仕様を分類するため便宜上使用する命名規則です。
public interface GangsterHome 
    extends EJBLocalHome 
{
    Collection findBadDudes_ejbql(int badness) throws FinderException;
}
select メソッドはエンティティ実装クラスで宣言し、CMP と CMR フィールドの抽象アクセッサーと同様、パブリックで抽象的であり、FinderException を送出する必要があります。以下のコードで select メソッドを宣言します。
public abstract class GangsterBean 
    implements EntityBean 
{
    public abstract Set ejbSelectBoss_ejbql(String name)
        throws FinderException;
}