Sorting 按引用排序<&燃气轮机;属性-对象化查询

Sorting 按引用排序<&燃气轮机;属性-对象化查询,sorting,objectify,Sorting,Objectify,在一次数据操作中,我突然想到要按Ref字段对查询结果进行排序 假设我有以下数据对象 EmployeeDO{Long id,String name,Ref company} CompanyDO{Long id,String name} 现在我想查询按公司名称排列的员工 我试过这个问题 Query<EmployeeDO> query = ofy().load().type(EmployeeDO.class).order("refCompany"); Query Query=ofy().

在一次数据操作中,我突然想到要按Ref字段对查询结果进行排序

假设我有以下数据对象

  • EmployeeDO{Long id,String name,Ref company}

  • CompanyDO{Long id,String name}

  • 现在我想查询按公司名称排列的员工

    我试过这个问题

    Query<EmployeeDO> query = ofy().load().type(EmployeeDO.class).order("refCompany");
    
    Query Query=ofy().load().type(EmployeeDO.class).order(“refCompany”);
    
    显然,这并没有用公司名称对结果进行排序,但这也成功地编译了


    请建议是否可以通过这种方式进行排序,或者尝试其他解决方法

    如果您使用@Index refCompany,则可以按refCompany排序,但它不会按公司名称排序-它将按键进行索引(如果您不使用@Parent,则只需id顺序)

    有两种“常规”选择:

    • 将数据加载到ram中并在那里进行排序。这就是RDBMS在内部所做的。GAE不支持连接的说法并不完全正确;只是你是查询计划员

    • 对公司名称进行非规范化和预索引。将
      @Index companyName
      放入EmployeeDO。如果您发现神奇的排序执行得很差(例如,员工太多),那么您将使用RDBMS执行此操作


    谢谢!我是按照你建议的第二种方式做的。这是可行的,只是每次更新公司名称或员工更改公司时,我都必须更新“employeeDO中的非规范化预索引公司名称”。我想知道是否有什么方法可以直接对ref属性:Name字段进行排序。那将是理想的。