2014-12-04 6 views
0

У меня есть список значений свойств с именем 'token'. Я пытаюсь фильтровать объект видаЗапрос движка Google приложения со списком строки

Это то, что я пробовал.

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 (жетоны), где «маркер» был частью сущности и был типа Список строки , Но я не знаю, почему это не работает. Может кто-нибудь, пожалуйста, помогите мне?

ответ

1

Вы объявляете какую-либо переменную, называемую «токены», но передаете параметр (предположительно, вы намеревались быть переменной токенов). Переменная не является параметром, они разные. Либо используйте явный параметр, либо неявный параметр (с префиксом), поскольку любые приличные документы JDO скажут вам

Смежные вопросы