Java Google App Engine数据存储区:JDO查询过滤器上的“IN”运算符与Python一样可用吗?

时间:2009-09-19 14:41:15

标签: java google-app-engine jdo

This page描述了一个'IN'运算符,可以在GAE数据存储区中用于将字段与可能的匹配列表进行比较,而不仅仅是单个值:

然而,这适用于Python。在Java(App Engine 1.2.5)中,尝试

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

触发JDOUserException'无法解析表达式的部分:IN param'。

有没有办法可以做到这一点?

2 个答案:

答案 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版本......