JDO查询订购问题

时间:2011-05-25 09:51:11

标签: java google-app-engine jdo

我有一个JDO查询,它过滤“Person”实体的两个属性,让我们称它们为“age”和“height”。我希望通过人员“得分”来订购结果。但是,由于App Engine的限制,我首先必须按年龄或高度排序。所以我目前有

query.setOrdering("age desc, score asc");

我真的对按年龄排序的结果不感兴趣,我只需要将其包含在查询中(因为我已按年龄过滤),我真的只需要按分数排序的结果。

有没有办法按分数排序结果并有效忽略年龄排序?

由于

1 个答案:

答案 0 :(得分:0)

您不能先按分数排序,因为没有索引可以支持该查询。

我推荐的解决方案/解决方法是选择一些预定义的年龄范围,预先计算这些范围的每个Person成员资格,然后对该成员资格使用相等过滤器,这样你就可以按score排序。

例如,如果您选择“< 13”,“13-18”和“18+”作为年龄范围,则需要为每个Person添加三个布尔属性。然后你可以做一个查询,比如“select * from Person where isUnder13 = true order by score”。我想在这种情况下,由于成员资格是互斥的,你可以使用单个枚举属性并搜索ageRange = 'UNDER_13'之类的内容,这将减少构建的索引数量。

当然,这意味着您无法拥有任意搜索功能......但选择较少并不总是对用户体验不利。