单场不等式在开发中工作并且在生产中失败

时间:2018-02-17 19:50:25

标签: google-app-engine objectify

以下查询在本地计算机上的Dev数据存储区中有效,在生产中失败。

List<ChildDTO> res = OfyService.ofy()
            .load()
            .type(classOfChild)
            .ancestor(parentKey)
            .filter("date >=", fromDateOnly)
            .filter("date <=", toDateOnly)
            .list();

据我所知,支持具有多个不等式的单个字段。

索引上是否有一些配置可以表明它应该包含祖先?

根据异常描述,需要以下索引配置。是否可以使用Objectify注释而不是xml配置来实现这一点?

<datastore-index kind="ChildDTO" ancestor="true" source="manual">
    <property name="date" direction="asc"/>
</datastore-index>

1 个答案:

答案 0 :(得分:1)

在这种情况下可能会产生误导的是查询出现是单个属性查询,它将使用简单的单属性索引,可以使用客观化注释实现。

但事实并非如此:这是一个祖先查询,祖先的存在计为第二个属性,这就是需要复合索引的原因。并且AFAIK复合索引不能通过客观化注释来处理。

这在本地开发环境中工作的原因是开发人员服务器使用缺少的复合索引自动更新索引文件。但是,这需要针对在GAE上运行的应用程序明确完成。