我正在关注此网站上的文档:http://code.google.com/intl/sv-SE/appengine/docs/java/datastore/jdo/queries.html
从那里我学会了如何进行查询,但我似乎只使用一个参数。以下是我成功的方法:
javax.jdo.Query q1 = pm.newQuery(Player.class);
q1.setFilter("isOpen == true");
List<Player> players = (List<Player>) q1.execute();
使用布尔值isOpen == true获取所有Player对象。我可以用Long做同样的事情,也可以。
问题在于:当合并两个这样的条件时:
javax.jdo.Query q1 = pm.newQuery(Player.class);
q1.setFilter("isOpen == true && lastPing > 100");
List<Player> players = (List<Player>) q1.execute();
该应用程序崩溃。这是我得到的错误:
来自servlet的未捕获异常 com.google.appengine.api.datastore.DatastoreNeedIndexException:没有 匹配索引找到。此查询的建议索引是: datastore-index kind =“Player”ancestor =“false”source =“manual” property name =“isOpen”direction =“asc”property name =“lastPing” direction =“asc”datastore-index
那么,有谁知道为什么会这样?非常感谢任何帮助。
答案 0 :(得分:3)
除非您对要进行不等式比较的列上有索引,否则不能将不等式过滤器与其他过滤器一起使用。将其添加到datastore-indexes.xml
文件夹中的WEB-INF
并部署它(完整部署或appcfg更新索引):
<datastore-index kind="Player" ancestor="false">
<property name="isOpen" direction="asc"/>
<property name="lastPing" direction="asc"/>
</datastore-index>