2014-12-04 40 views
0

我有一个名为'标记'的属性值列表。我试图过滤一种实体谷歌应用程序引擎查询与字符串列表

这是我试过的。

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(标记),其中“令牌”是实体的一部分,是字符串类型的List 。但我不知道为什么这不起作用。有人可以帮帮我吗?

回答

1

您声明了一些名为“令牌”的变量,但它传入了一个参数(可能是您想要作为令牌变量的值)。变量不是一个参数,它们是不同的。要么使用显式参数,要么使用隐式参数(使用:前缀),因为任何体面的JDO文档都会告诉您

相关问题