2011-11-29 62 views
1

我跟随在本网站的文档:http://code.google.com/intl/sv-SE/appengine/docs/java/datastore/jdo/queries.html如何在java中使用JDO查询GAE时设置多个参数?

从那里我学会了如何使查询,但我似乎只能用一个参数来工作。下面是我如何成功地做它:

javax.jdo.Query q1 = pm.newQuery(Player.class); 

q1.setFilter("isOpen == true"); 

List<Player> players = (List<Player>) q1.execute(); 

,其获取我所有的布尔ISOPEN 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

ERRM,数据存储需求“lastPing”索引第一? – DataNucleus

回答

3

除非您在进行不等式比较的列上有索引,否则不能执行不等式过滤器和其他过滤器。在WEB-INF文件夹添加到您的datastore-indexes.xml和部署(无论是全部署或下,appcfg更新索引):

<datastore-index kind="Player" ancestor="false"> 
     <property name="isOpen" direction="asc"/> 
     <property name="lastPing" direction="asc"/> 
    </datastore-index> 
相关问题