GreenDAO toMany Relation - 目标实体订单

时间:2015-03-09 15:19:37

标签: android orm greendao

我的架构中有一个toMany关系("人类有1只猫......#34;)。如果我查询实体的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)。

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

1 个答案:

答案 0 :(得分:1)

  

是否保证订购退货清单?如果是的话,取决于哪个属性?

简短回答是,if;长期回答否使用但是:项目的顺序是隐式未定义的,但可以在toMany关系中明确设置。

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

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

  

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

这似乎是想要的行为,因为SQLite Docs state每个列名都可以跟随其中一个&#34; ASC&#34;或者&#34; DESC&#34;表示排序顺序的关键字。鉴于GreenDAO支持较旧的Android版本(因此较旧的SQLite版本,请参阅SO question/answer here 在索引上附加排序顺序是有意义的。