【问题标题】:GreenDAO toMany Relation - Target Entities OrderGreenDAO toMany Relation - 目标实体顺序
【发布时间】:2015-03-09 15:19:36
【问题描述】:

我的架构中有一个 toMany 关系(“一个人有 1..N 只猫”)。如果我查询一个实体的 toMany-target 实体,我使用以下代码:

List<Cat> cats = human.getCatList();

返回的列表是否保证有序?如果是,取决于哪个属性?

附加信息(生成代码):

在我的架构(生成器)中,实体的创建方式如下:

Entity human = schema.addEntity("human");
human.addIdProperty().autoincrement();

Entity cat = schema.addEntity("cat");
cat.addIdProperty().autoincrement();
pb = cat.addLongProperty("humanId");
pb.notNull();
pb.indexAsc(null, false);

human.addToMany(cat, pb.getProperty());

因此,我认为顺序是(隐式)由创建的索引定义的,但查看CatDao.java 显示索引是在没有定义顺序的情况下创建的:

"CREATE INDEX " + constraint + "IDX_CAT_HUMAN_ID ON CAT (HUMAN_ID);"

pb.indexAsc 更改为pb.indexDesc 确实会更改索引名称,但不会更改列的索引顺序(请参阅:SQLite Syntax: indexed-column)。

那么 - 这是想要的行为吗?如何定义目标实体的顺序?

【问题讨论】:

    标签: android orm greendao


    【解决方案1】:

    返回的列表是否保证有序?如果是,取决于哪个属性?

    用 if 简短回答是;长答案 no with a but:项目的顺序未隐式定义,但可以在 toMany 关系中显式设置。

    human.addToMany(cat, [...]).orderAsc([...]);
    

    将在为人类实体创建的Cat.java 中生成ORDER BY 语句(请参阅Cat#_queryHuman_CatList)。

    因此,我认为顺序是(隐式)由创建的索引定义的,但查看CatDao.java 显示索引是在没有定义顺序的情况下创建的。

    这似乎是想要的行为,因为SQLite Docs state每个列名后面都可以跟一个“ASC”或“DESC”关键字来指示排序顺序。排序顺序可能会或可能不会被忽略,具体取决于数据库文件格式 [...] - 鉴于 GreenDAO 支持较旧的 Android 版本(因此支持较旧的 SQLite 版本,请参阅 SO question/answer here不 strong> 在索引上附加排序顺序是有意义的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多