【问题标题】:How to set multiple parameters when querying in GAE with JDO in java?java中使用JDO在GAE中查询时如何设置多个参数?
【发布时间】:2011-11-29 13:51:19
【问题描述】:

我正在关注此站点上的文档: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:否 找到匹配索引。此查询的建议索引是: 数据存储索引种类=“玩家”祖先=“假”源=“手册” 属性名称="isOpen" 方向="asc" 属性名称="lastPing" direction="asc" 数据存储索引

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

【问题讨论】:

  • Errm,数据存储区需要先“lastPing”索引?

标签: java google-app-engine jdo


【解决方案1】:

除非您在进行不等式比较的列上有索引,否则您不能同时执行不等式过滤器和另一个过滤器。将此添加到您的 WEB-INF 文件夹中的 datastore-indexes.xml 并部署它(完整部署或 appcfg 更新索引):

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

【讨论】:

    猜你喜欢
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多