Java 如何有效地解析模型对象中的一对多关系?

Java 如何有效地解析模型对象中的一对多关系?,java,android,sqlite,Java,Android,Sqlite,我在表中有1:n关系: 表A id、名称、foo、bar 表B id,x,y,z,id_A 在我的域模型中,表A的每一行都是一个对象,包含一个B的集合 我如何解析这个 我可以先对A进行查询,然后在解析循环中,对每一行对B进行查询。但这看起来效率不高 我还尝试了连接查询,但这会为B的每个条目添加一个新行,然后我无法将这些行中的每一行映射到一个模型对象 是否有一个查询可以将额外的连接行“减少”为一个聚合结果 看起来像是关系数据库的标准案例,但我找不到关于它的信息 谢谢。在嵌入式数据库(如SQLite

我在表中有1:n关系:

表A id、名称、foo、bar

表B id,x,y,z,id_A

在我的域模型中,表A的每一行都是一个对象,包含一个B的集合

我如何解析这个

我可以先对A进行查询,然后在解析循环中,对每一行对B进行查询。但这看起来效率不高

我还尝试了连接查询,但这会为B的每个条目添加一个新行,然后我无法将这些行中的每一行映射到一个模型对象

是否有一个查询可以将额外的连接行“减少”为一个聚合结果

看起来像是关系数据库的标准案例,但我找不到关于它的信息


谢谢。

在嵌入式数据库(如SQLite)中,没有客户机/服务器通信开销,因此实际上可以执行许多这样的小查询:

从表B中选择id,x,y,z,其中id_A=?
如果确实希望使用单个查询加载所有B子对象,可以使用以下两个单独的查询:

从表A中选择id、名称、foo、bar按id排序;
从表B中按id_A顺序选择id_A、id、x、y、z;
然后,您将并行地遍历两个游标,并为每个A记录收集具有相同ID的所有B记录;ORDER BY子句确保您按正确的顺序看到它们:

cursorA=db.query(…);
cursorB=db.query(…);
cursorB.moveToFirst();
while(cursorA.moveToNext()){
id=cursor.getInt(0);
a=新对象a(id,…);
而(!cursorB.isAfterLast()&&
cursorB.getInt(0)=id){
b=新对象b(…);
a、 addB(b);
cursorB.moveToNext();
}
}

请注意,这不太可能比对每个a进行单独查询更有效,因为对
id\u a
列上的所有记录进行排序并不比对同一列进行多次查找更有效。(但是,如果该列上没有索引,查找将比排序慢得多。)

您需要什么代码?这是一个概念问题,我没有任何代码。