加入ActiveAndroid - 如何获取第二个表的数据

时间:2015-04-17 04:46:15

标签: android sqlite activeandroid

我使用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,因为这似乎是一个非常基本的功能,而且已经坏了。

0 个答案:

没有答案