预加载是否解决了 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 问题。
关于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 问题。