我的架构中有一个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)。
那么 - 这是想要的行为吗?如何定义目标实体的顺序?
答案 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) 在索引上附加排序顺序是有意义的。