This page描述了一个'IN'运算符,可以在GAE数据存储区中用于将字段与可能的匹配列表进行比较,而不仅仅是单个值:
然而,这适用于Python。在Java(App Engine 1.2.5)中,尝试
query.setFilter("someField IN param");
我的javax.jdo.query上的触发JDOUserException'无法解析表达式的部分:IN param'。
有没有办法可以做到这一点?
答案 0 :(得分: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);
}
答案 1 :(得分:1)
IN
的Python版本实际上是在应用程序级代码中实现的(您可以检查它,因为它是开源App Engine SDK的一部分):本质上,一个IN
类似的查询你的==
成为N个查询(其中N == len(param)),这些N个查询的结果将作为整体结果合并回来。
虽然将此功能作为Google提供的源代码的一部分很方便,但除了这种方便之外,实际上没有任何附加价值,特别是在您自己的代码中没有性能优势。所以,我并不感到惊讶,这个小调整(至少到目前为止)没有添加到Java版本......