用java在google app engine中查询密钥列表和引用密钥
我正在尝试查询具有键列表和参照键的对象,如下所示:用java在google app engine中查询密钥列表和引用密钥,java,google-app-engine,google-cloud-datastore,Java,Google App Engine,Google Cloud Datastore,我正在尝试查询具有键列表和参照键的对象,如下所示: //s is a datastore key Query q2 = pm.newQuery(Stream_Result.class,":p.contains(key) && stream == " + KeyFactory.keyToString(s)); ArrayList<List<Stream_Result> stream_r_list = (List<Stream_Result>) q2.
//s is a datastore key
Query q2 = pm.newQuery(Stream_Result.class,":p.contains(key) && stream == " + KeyFactory.keyToString(s));
ArrayList<List<Stream_Result> stream_r_list = (List<Stream_Result>) q2.execute(Arrays.asList(cr.getStreamResults().toArray()))
如何处理此问题?不应通过向查询字符串附加参数值来构造查询字符串。而是使用一个查询字符串,在其中指示参数(位置),然后执行参数化的查询,并将参数值传递给execute方法q2.setFilter(“:p1.contains(key)”);“”q2.setFilter(“stream==streamParam”);“”q2.declareParameters(“com.google.appengine.api.datastore.Key streamParam”);''q2.execute(Arrays.asList(cr.getStreamResults().toArray()),s);'但每当我这样做时,我都会得到错误“查询需要1个参数,但提供了2个值”。我不知道这有什么问题。您会收到错误消息:“查询需要1个参数,但提供了2个值。”因为您将2个参数传递给
execute()
方法:aList
和键
s;但是您只声明了一个键参数!我还需要使用contains()
方法从代码中的键列表中查询对象的主键。如果我在execute()
方法中仅放置键
s,则会出现另一个错误:为查询定义了显式参数,但找到了隐式参数语法(“:p1”)
您应该再次检查查询文档。在查询字符串中指定参数有两种方法:按索引和按名称。看起来你把这两者混在一起了。您的思路是正确的,只需查看文档,了解如何准确地指定参数。
org.datanucleus.store.appengine.query.DatastoreQuery$UnsupportedDatastoreFeatureException:
Right side of expression is composed of unsupported components. Left: org.datanucleus.query.expression.VariableExpression, Op: - , Right: VariableExpression{dIBDA}