2011-07-01 9 views
0

メンバが列挙型のオブジェクトがあり、そのメンバが値リストにあるすべての要素を返すクエリを書きたいと思います。だから、私は明らかに、私はこれ(間違っている私は、次のEJBコードを使用して取得しようと、次のJQPクエリメンバの値が値のコレクションにある場合JPQLを使用する方法

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from "+MyBean.TABLE+" t where t.status member of :statuses"), 
class MyBean { 
    @Enumerated(EnumType.STRING) 
    private MyEnum status; 
} 

Query findByStatuses = getEntityManager().createNamedQuery(MyBean.FIND_BY_STATUSES); 
    findByStatuses.setParameter("statuses", Arrays.asList(statuses)); 
    return findByStatuses.getResultList(); 

残念ながら、Glassfishのは、際限なく私に指示を書きました)。 しかし、私は何を修正する必要がありますか?そしてどうやって ?

答えて

0

最初にクエリはテーブル名を参照するため、SQLのようになりますが、データベースにはこの種の使用に適した "MEMBER OF" -operatorがない可能性がありますので、JPQLを試してみましょう。そこでは引数としてパス式をとり、setParameterで提供するものではないため、MEMBER OFは使用できません。代わりにINを使用します:

@NamedQuery(name = MyBean.FIND_BY_STATUSES, query = "select t from MyBean t where t.status in(:statuses)") 

クエリを実行する部分を変更する必要はありません。