Objectify多个过滤器不适用于cron作业

时间:2014-08-28 11:38:29

标签: java google-app-engine cron objectify

我在appengine上使用objectify,我试图添加一个cron作业来删除超过一小时的所有临时实体:

Iterable<Key<Entry>> allKeys = ofy().load().type(Entry.class)
                                    .filter("temporary", true)
                                    .filter("createdAt", oneHourAgo).keys();
if(allKeys != null){
  ofy().delete().keys(allKeys);
}

但在appengine服务器上执行cron作业时总是会出现异常:

com.google.appengine.api.datastore.DatastoreNeedIndexException: no matching index found.
The suggested index for this query is:
    <datastore-index kind="Entry" ancestor="false" source="manual">
        <property name="temporary" direction="asc"/>
        <property name="createdAt" direction="asc"/>
    </datastore-index>

有人知道为什么会这样吗?如果我删除了该作业:

.filter("createdAt", oneHourAgo)

1 个答案:

答案 0 :(得分:1)

当您将应用程序与开发服务器一起使用时,开发服务器会尝试确定您需要哪些索引,并将它们自动放入索引定义文件中。由于您在cron作业中使用此查询,因此开发服务器无法帮助您。您需要手动为此索引添加定义。

Java Datastore Index Configuration