2011-07-01 51 views
0

我有一個對象,其中一個成員是一個枚舉,我想寫一個查詢返回該成員是在值列表中的所有元素。所以,我寫了下面的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; 
} 

那我嘗試使用以下EJB代碼來獲取

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

不幸的是,Glassfish的無休止告訴我,我錯了(這我,很明顯)。 但是我需要解決什麼問題?如何 ?

回答

0

首先你的查詢引用了表名,所以它試圖成爲一種SQL,但也許數據庫沒有「MEMBER OF」 - 操作符,這將適合這種用法,所以我們試試JPQL。在那裏,我們不能使用MEMBER OF,因爲它將路徑表達式作爲參數,而這不是我們在setParameter中提供的。相反,我們使用:

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

不需要你逃到哪裏查詢修改的部分。

相關問題