【问题标题】:Sort by multiple columns with objectify使用objectify按多列排序
【发布时间】:2014-01-28 13:08:55
【问题描述】:

我想知道,是否有一种方法可以使用 2 列而不只是一个列对查询进行排序。我很确定query.order("param1").order("param2") 忽略了一个参数。

是否可以对多列使用 objectify 进行排序?

这是我的@Entity

@Entity
public class Operation {    
    @Id protected Long id;
    @Index protected Long creatorId;
    @Index protected Long categoryId;
    @Index protected Double value;
    @Index protected String description;
    @Index protected Date date;
}

【问题讨论】:

  • 有趣的问题!这在 Objectify 文档中并不明显,但根据 Jeff 对此question 的回复,这是可能的。您选择的排序组合是否有自定义索引?
  • 您的示例应该可以工作,只需多次调用order()。如果您没有得到结果并且定义了正确的多属性索引,则应该发布更多详细信息。请注意,id 不是可以排序的真实字段(但__key__ 是)。
  • 我没有自定义索引,不确定如何制作。我读过这个小组,但没有解决方案,只有线索,正如你所注意到的那样
  • 如果你想,说,“ORDER BY categoryId ASC, date DESC”,你需要一个自定义索引来支持这个。 This page 应该有帮助。
  • .order("param1").order("param2") 是否等同于“ORDER BY param1, param2”或“ORDER BY param2, param1”?

标签: java google-app-engine objectify


【解决方案1】:

可以对多列使用 objectify 进行排序。 事实上,如果您有正确的多属性索引,您在问题中的查询应该可以工作。

例如,如果您想按日期和 creatorId 排序结果(从您的问题中获取这些字段),您需要在项目的“datastore-indexes.xml”文件中有以下索引:

<datastore-index kind="Operation " ancestor="false">
    <property name="date " direction="asc" />
    <property name="creatorId" direction="asc" />
</datastore-index>

请注意,这只是一个示例。 “祖先”、“方向”的实际值取决于您的要求。

另一个选项是自动生成所需的索引。如果您在 GAE 开发服务器上运行您的应用程序,开发服务器会自动生成具有所需索引的数据存储索引文件 (WEB-INF/appengine-generated/datastore-indexes-auto.xml)。

您可以阅读更多关于它的信息here

【讨论】:

    猜你喜欢
    • 2020-06-08
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2023-04-11
    相关资源
    最近更新 更多