5

我正在使用 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 文档中关于从一对多关系的多方获取“多”记录的唯一内容是调用Model.getMany,但它运行自己的查询(结果集中的每条记录一个!),所以如果我这样做了,在第一个查询中加入是没有意义的。

我是否遗漏了什么,因为 ActiveAndroid 似乎允许连接,但没有用,因为您只能从连接中的一个表中获取结果?在这种情况下,我可以解决它,但我想知道我是否选择了错误的 ORM,因为这似乎是一个非常基本的功能,但已被破坏。

4

0 回答 0