gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 13:53:49 25 4
gpt4 key购买 nike

我在表中有 1:n 关系:

表Aid、名称、foo、bar

表Bid、x、y、z、id_A

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

我该如何解析这个?

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

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

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

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

谢谢。

最佳答案

在 SQLite 等嵌入式数据库中,没有客户端/服务器通信开销,因此执行大量像这样的小查询实际上是可行的:

SELECT id, x, y, z FROM TableB WHERE id_A = ?

如果您确实想使用单个查询来加载所有 B 子对象,您可以使用两个单独的查询,如下所示:

SELECT id,   name, foo, bar FROM TableA ORDER BY id;
SELECT id_A, id, x, y, z FROM TableB ORDER BY id_A;

然后,您将并行地遍历两个游标,并针对每个 A 记录,收集具有相同 ID 的所有 B 记录; ORDER BY 子句确保您以正确的顺序看到它们:

cursorA = db.query(...);
cursorB = db.query(...);
cursorB.moveToFirst();
while (cursorA.moveToNext()) {
id = cursor.getInt(0);
a = new ObjectA(id, ...);
while (!cursorB.isAfterLast() &&
cursorB.getInt(0) == id) {
b = new ObjectB(...);
a.addB(b);
cursorB.moveToNext();
}
}

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

关于java - 如何有效解析模型对象中的一对多关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19756757/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com