Java的谷歌App Engine数据存储:“在”运营商对JDO查询过滤器可用,与Python?

StackOverflow https://stackoverflow.com/questions/1448677

  •  11-09-2019
  •  | 
  •  

此页面描述了一种 'IN' 操作者可在数据存储区GAE用于比较一个方面对可能匹配的列表,而不是只是一个单一的值:

然而,这是用于Python。在Java(应用程序引擎1.2.5),试图

query.setFilter("someField IN param");

在我的javax.jdo.query触发一个JDOUserException“表达的部分无法解析:在参数”。

有没有一种方法可以做到这一点?

有帮助吗?

解决方案

IN的Python版本是在应用程序级代码实际执行(其可以检查自从它的开源应用程序引擎SDK的一部分):实质上,与像您的IN的查询变得与== N次查询(其中n ==可LEN(PARAM))和那些N次查询的结果被合并回作为总的结果。

虽然可以说是方便有这个功能的谷歌提供的源代码的一部分,没什么超出了方便没有附加值,特别是有只是在做它自己的代码没有性能优势WRT。所以,我并不感到惊讶,这小调整是(至少到目前为止)未加入到Java版本...

其他提示

要使用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);
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top