预加载是否解决了 n+1 问题? (SpringBoot/hibernate)

Does eager loading solve n+1 problem? (SpringBoot/hibernate)

关于n+1问题的文章很多,但通常都是从解释如何用自定义方法解决它开始。

我的问题很笼统:预加载能解决n+1问题吗?

(换句话说:当我们使用eager loading时是否有机会出现n+1问题?只有惰性加载时是否有机会出现n+1问题?)

你可以认为我有一个 Car 实体和 Collection<Wheel> 以及其中的 @OneToMany 关系。假设我使用的是 SpringBoot > 2,Hibernate

如果你只有这两个实体,是的,它解决了 N+1 问题。然而,现实世界的应用程序并非总是如此。如果您继续对所有关系使用预取,则会导致其他问题,例如过度获取。

抱歉,如果我之前的回答对你来说不是很清楚,但你已经明白了。

the condition for n+1 problem is: Lazy fetching + existing session (to prevent the lazyinitializationexception)

所以你应该使用 "FETCH JOIN" 或 EntityGraph 来避免 N+1 问题。