我使用ActiveAndroid并使用外部联接运行查询:
List<NavigationState> models = new Select()
.from(NavigationState.class)
.leftJoin(BundleItem.class)
.on("aColumnName = anotherColumnName")
.execute();
显然我想要的是NavigationStates,以及任何相关的BundleItems。我实际得到的是NavigationStates。这是运行查询后填充游标数据的ActiveAndroid代码的一部分:
List<String> columnsOrdered = new ArrayList<String>(Arrays.asList(cursor.getColumnNames()));
do {
Model entity = Cache.getEntity(type, cursor.getLong(columnsOrdered.indexOf(idName)));
if (entity == null) {
entity = (T) entityConstructor.newInstance();
}
entity.loadFromCursor(cursor);
entities.add((T) entity);
}
while (cursor.moveToNext());
}
}
你可以看到整个事情,它是processCursor
方法,在这里:https://github.com/pardom/ActiveAndroid/blob/df29214c9584d7b626f361e95b95daccb0c0114c/src/com/activeandroid/util/SQLiteUtils.java
正如您所看到的,它不会尝试做任何事情,只是填写传入的类型(loadFromCursor
也不会从其他表中填写任何内容)。我甚至把它改为要求BundleItem
的列表,它显然仍然返回相同的东西。
AA文件中唯一关于获取&#34;许多&#34;来自一对多关系的许多方面的记录是调用Model.getMany
,但它运行自己的查询(结果集中的每个记录一个!),所以如果我这样做那里的话没有必要在第一个查询中进行连接。
我错过了一些东西,因为似乎联接是允许使用ActiveAndroid,但没有用,因为你只能从连接中的一个表中获得结果?在这种情况下,我可以解决这个问题,但我想知道我是否选择了错误的ORM,因为这似乎是一个非常基本的功能,而且已经坏了。