【问题标题】:Google app engine query with a list of string带有字符串列表的 Google 应用引擎查询
【发布时间】:2025-12-24 17:55:06
【问题描述】:

我有一个名为“令牌”的属性值列表。我正在尝试过滤一种实体

这是我尝试过的。

List<String> tokens = getTokensFrom(invitations);
PersistenceManager pm = this.dataStoreService.getObjectDBConnection();
Query query = pm.newQuery(Invitations.class);
query.setFilter("tokens.contains(token)");
query.declareVariables(List.class.getName() + " tokens");
List<Invitations> invites = (List<Invitations>) query.execute(tokens);

但我收到以下错误消息。

Problem with query <SELECT FROM com.mypackage.shared.domainobjects.Invitations WHERE tokens.contains(token) VARIABLES java.util.List tokens>: Unsupported method <contains> while parsing expression: InvokeExpression{[VariableExpression{tokens}].contains(PrimaryExpression{token})}
com.google.appengine.datanucleus.query.DatastoreQuery$UnsupportedDatastoreFeatureException: Problem with query <SELECT FROM com.testbudha.shared.domainobjects.PublishedExam WHERE tokens.contains(token) VARIABLES java.util.Collection tokens>: Unsupported method <contains> while parsing expression: InvokeExpression{[VariableExpression{tokens}].contains(PrimaryExpression{token})}
    at com.google.appengine.datanucleus.query.DatastoreQuery.newUnsupportedQueryMethodException(DatastoreQuery.java:993)
    at com.google.appengine.datanucleus.query.DatastoreQuery.handleContainsOperation(DatastoreQuery.java:971)
    at com.google.appengine.datanucleus.query.DatastoreQuery.addExpression(DatastoreQuery.java:830)
    at com.google.appengine.datanucleus.query.DatastoreQuery.addFilters(DatastoreQuery.java:739)
    at com.google.appengine.datanucleus.query.DatastoreQuery.compile(DatastoreQuery.java:248)
    at com.google.appengine.datanucleus.query.JDOQLQuery.performExecute(JDOQLQuery.java:158)
    at org.datanucleus.store.query.Query.executeQuery(Query.java:1789)
    at org.datanucleus.store.query.Query.executeWithArray(Query.java:1666)
    at org.datanucleus.api.jdo.JDOQuery.execute(JDOQuery.java:243)

我之前遇到过类似的问题,但它可以工作,因为过滤条件是相反的,即 this.token.contains(tokens) 其中“token”是实体的一部分,并且是字符串列表类型。但我不确定为什么这不起作用。有人可以帮帮我吗?

【问题讨论】:

    标签: java google-app-engine google-cloud-datastore jdo


    【解决方案1】:

    您声明了一些名为“tokens”的变量,但传入了一个参数(大概是您想要的 tokens 变量)。变量不是参数,它们是不同的。使用显式参数或隐式参数(带有 : 前缀),任何体面的 JDO 文档都会告诉您

    【讨论】:

      最近更新 更多