我尝试在谷歌应用引擎标准环境中使用objectify并获得异常。我的课程看起来像这样:
@Entity
public class Company {
@Id Long id;
@Index String companyName;
public Company() {
}
public Company(Long id, String companyName) {
this.id=id;
this.companyName = companyName;
}
}
@Entity
public class CompanyProject {
@Id Long id;
@Index String projectName;
@Parent Key<Company> owner;
public String cost;
public CompanyProject() {
}
public CompanyProject(long userId, String projectName) {
this();
this.projectName = projectName;
owner = Key.create(Company.class, userId); // Creating the Ancestor key
}
}
当我查询这样的数据时:
Key<Company> theUser = Key.create(Company.class, 1);
Iterable<CompanyProject> projects = ObjectifyService.ofy().load().type(CompanyProject.class).ancestor(theUser).order("projectName").list();
我得到例外
com.google.cloud.datastore.DatastoreException: no matching index found. recommended index is:
- kind: CompanyProject
ancestor: yes
properties:
- name: projectName
没有订单(&#34; projectName&#34;)查询工作正常。从数据存储中删除了所有此类实体,而不是添加新实体,仍然会获得此异常。如果这很重要,我会使用Gradle,而不是Maven。也许应该是额外的构建步骤来创建索引或smth。
答案 0 :(得分:1)
您正在过滤多个属性(嗯,祖先计为&#39;另一个属性&#39;)因此您需要在session_start();
中定义多属性索引。
请参阅官方文档:https://cloud.google.com/appengine/docs/standard/java/config/indexconfig