2009-09-19 48 views
0

This page介紹了可在GAE數據存儲可用於現場比較反對可能的匹配,而不僅僅是一個單一值的列表中的「IN」操作符:Java Google App Engine數據存儲:與Python一樣,JDO查詢過濾器上有'IN'運算符嗎?

不過這就是Python。在Java(App Engine的1.2.5),試圖

query.setFilter("someField IN param"); 
我javax.jdo.query

觸發一個JDOUserException '表達的部分無法解析:在參數'。

有沒有辦法可以做到這一點?

+0

這是無效的JDOQL。建議您閱讀JDO規範或GAE/J文檔查詢語法......特別是「contains()」,如下所示 – DataNucleus 2011-05-13 07:19:22

回答

1
IN

Python的版本是在應用程序級代碼實際執行(你可以檢查,因爲它是開源的App Engine SDK的一部分):本質上,與IN像你這樣的查詢變爲N查詢與==(其中N == len(param)),並將這些N個查詢的結果合併爲整體結果。

儘管將這個功能作爲Google提供的源代碼的一部分可以說是方便的,但除此之外,實際上沒有任何附加價值,特別是在您自己的代碼中沒有性能優勢。所以,我並不感到驚訝,這小調整是(至少到目前爲止)未加入到Java版本...

2

要使用IN操作符,我用這個:

List<Site> query(List<String> searchTerms) 
{ 
    javax.jdo.Query q = pm.newQuery(Site.class); 
    q.setFilter("param.contains(siteField)"); 
    q.declareParameters("java.util.Collection param"); 
    return (List<Site>)q.execute(searchTerms); 
} 
相關問題