我正在尝试使用App Engine,Datastore和Objectify 4.我有一个工作的Objectify查询,它从数据存储区中获取给定类型的所有实体。我正在尝试根据日期对结果进行排序:
List<MyEntity> entities = OfyService.ofy().load().type(MyEntity.class).order("-createdDate").list();
但是在我添加订单后,查询返回0条记录。这是我的实体类:
@Entity
public class MyEntity
{
@Id Long id;
Long userID;
@Ignore String username;
@Index String name;
String url;
String description;
@Index Date createdDate;
@Index int viewCount;
}
我尝试按其他数据类型订购但没有成功。为什么会这样?
答案 0 :(得分:2)
我们需要在WEB-INF / datastore-indexes.xml中手动定义索引。
<?xml version="1.0" encoding="utf-8"?>
<datastore-indexes
autoGenerate="true">
<datastore-index kind="AppMedia" ancestor="false">
<property name="createdDate" direction="desc" />
</datastore-index>
</datastore-indexes>
然后正确创建索引并且查询将起作用。 注意:查询仅适用于正确配置索引后添加的行。
答案 1 :(得分:0)
我通过cloud.google.com查看了数据存储区,在打开任何实体时,所有字段都标记为“未编入索引”,包括在我的实体类中使用@Index定义的字段。当我在数据存储区中手动标记“索引”字段时,带有排序的查询有效。当通过Objectify保存时,不应该在实体中使用@Index标记的所有字段都在数据存储区中编入索引吗?我在这里缺少什么?