在java中使用JDO查询GAE时如何设置多个参数?

时间:2011-11-29 13:51:20

标签: java google-app-engine jdo

我正在关注此网站上的文档: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

那么,有谁知道为什么会这样?非常感谢任何帮助。

1 个答案:

答案 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>