2012-04-09 64 views
0

忽略我有一个GAE的实体,称为MyFile的排序顺序是物化查询

public class MyFile { 
    static enum LocationEnum {Folders, Hidden}; 
    static enum FileType {File, Folder); 
    @Id private Long id; 
    private Key<MyFile> parent; 
    private String name; 
    private LocationEnum location; 
    private FileType fType; 

    // getters and setters 
} 

,并在单独DAO类的功能来查询基于它们的父文件,返回按名称排序的结果。

public List<MyFile> getFiles(Key<MyFile> parent) { 
    Query<MyFile> q1 = ofy().query(MyFile.class).filter("parent", parent).filter("location", LocationEnum.Folders).order("name"); 
    return q1.list(); 
} 

看起来我的订单被忽略,因为结果按ID排序。我确实发现我错过了一些与索引有关的事情,但我注意到GAE祝福我根据位置,父母,姓名自动生成索引。所以我认为它会起作用。

如何按名称订购?

回答

1

我发现了这个问题。在App Engine上执行不区分大小写的搜索是不可能的。 GAE将按照大写字母A-Z,然后是a-z进行排序。

+0

默认的ASCII码顺序。也就是说,如果您为“降序”或“+”从“名称”开始升序(“+名称”),则可能会有诀窍。但是,我不认为这会不区分大小写。 – PSchuette 2016-08-01 03:58:39

0

您使用的是什么版本的Objectify?从Objectify4开始,所有字段默认为未索引。所以你需要用@Index注释必要的字段。

+0

我正在使用Objectify 3.1。我尝试添加我自己的索引到datastore-indexes.xml作为'name'属性,但没有运气。存在的3个MyFile实体具有测试(id 90),UserGuide.pdf(id 88)和defaultlogo.png(id 87)的名称值。我是否正确地期望它们以defaultlogo.png开始按字母顺序返回? – rossco 2012-04-10 04:57:03

+0

这很奇怪。当您在开发数据存储查看器中查看实体时,是否看到'name'字段? – expert 2012-04-10 05:00:47

+0

是的,我在数据存储查看器中看到名字。值是根据以前的评论。我是否需要将名称作为过滤器来按名称排序? – rossco 2012-04-10 05:04:47