gpt4 book ai didi

java - 如何解决 N+1 选择问题?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:07:47 25 4
gpt4 key购买 nike

我无法理解如何在 jpa 或 hibernate 中避免 n+1 选择。

根据我的阅读,有“左连接获取”,但我不确定它是否仍然适用于多个列表 (oneToMany)..

有人可以向我解释一下吗,或者给我一个带有清晰完整解释的链接?

如果这是一个菜鸟问题,我很抱歉,但我找不到关于这个问题的真正清晰的文章或文档。

谢谢

最佳答案

除了连接,您还可以使用子选择。这会导致执行 2 个查询(或者通常 m + 1,如果您有 m 列表),但它也适用于大量列表,这与 join 不同获取。

使用连接抓取,如果您使用您的实体抓取 2 个表(或列表),您将得到一个笛卡尔积,即两个表中行对的所有组合。如果表很大,结果可能很大,例如如果两个表都有 1000 行,则笛卡尔积包含 100 万行!

对于这种情况,更好的替代方法是使用子选择。在这种情况下,您将在主选择(加载父实体)之上发出 2 个选择 - 每个表一个 - 因此您总共加载 1 + 100 + 100 行和 3 个查询。

郑重声明,延迟加载同样会导致 201 次单独选择,每次加载一行。

更新:这里有一些例子:

关于java - 如何解决 N+1 选择问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2593029/

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