0

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

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

query.setFilter("someField IN param");

在我的 javax.jdo.query 上触发 JDOUserException '无法解析表达式部分:IN param'。

有没有办法做到这一点?

4

2 回答 2

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);
}
于 2011-05-13T07:04:18.777 回答
1

Python 版本IN实际上是在应用程序级代码中实现的(您可以检查它,因为它是开源 App Engine SDK 的一部分):本质上,与IN您类似的查询变成 N 查询==(​​其中 N == len(param )) 并且这 N 个查询的结果将作为整体结果合并回来。

虽然可以说将此功能作为 Google 提供的源代码的一部分很方便,但除了这种便利之外,确实没有任何附加价值,尤其是在您自己的代码中执行此功能并没有性能优势。所以,我对这个小调整(至少到目前为止)没有添加到 Java 版本中并不感到惊讶......

于 2009-09-19T15:45:50.037 回答