绿色DAO对多关系 - 目标实体顺序



我的模式中有一个toMany关系("一个人有1..N只猫")。如果我查询实体的多目标实体,我使用以下代码:

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 语法:索引列)。

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

返回的列表是否保证可以订购?如果是,取决于哪个属性?

短答案是(带

if);长回答"否"(带 but):项的顺序不隐式定义,但可以在toMany关系中显式设置。

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

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

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

这似乎是想要的行为,因为正如SQLite Docs所述:每个列名后面可以跟一个"ASC"或"DESC"关键字以指示排序顺序。排序顺序可能会也可能不会被忽略,具体取决于数据库文件格式 [...]- 鉴于 GreenDAO 支持较旧的 Android 版本(因此支持较旧的 SQLite 版本,请参阅此处的 SO 问题/答案),不在索引上附加排序顺序是有意义的。

最新更新