Google 应用引擎,对象化如何按子实体字段排序?

Google app engine, objectify how to order by a sub entity field?

我有一个包含以下字段的课程实体

@Index
private @Load
Ref<Student> student;

学生实体然后具有字段

 @Index
private String matric;

我想加载所有课程实体 sorted 使用学生矩阵号。

我试过使用“.”运算符像这样获取子字段

ofy().load().type(Course.class).filter("course", course).order("student.matric").list();

但这return没有结果。

这可以吗?如何?

我认为使用 objectify 不可能做到这一点。我会让 Course 实现 Comparable:

@Entity
public class Course implements Comparable<Course> {
    .
    .
    .
    @Override
    public int compareTo(Course otherCourse) {
        return this.getStudent().getMatric().compareTo(otherCourse.getStudent().getMatric());
    }
}

删除 Objectify 加载的 "order" 部分并改用 Collections.sort():

List<Course> courses = ofy().load().type(Course.class).filter("course", course).list();
Collections.sort(courses);

数据存储中没有连接。如果您想按学生属性查询您的课程,您可能需要将数据非规范化为课程并为其编制索引。这意味着更改学生数据也将需要更改课程。

顺便说一句:这个数据模型很奇怪。你确定你所说的课程不是真正的注册吗?