如何使用渴望获取来避免N + 1问题

问题描述

我有一个简单的数据模型。 Student具有一个ManyToOne的{​​{1}}关系。 ClassClass之间有一个OnetoMany关系,例如,同一位老师的授课内容不会超过课堂上的内容

我的实体定义为

Teacher

我正在使用spring boot:spring数据jpa 2,使用Hibernate作为JPA实现。

显然,以上映射导致N + 1次调用,关联越多,调用越多。

我可以使用所有联接构造自己的sql并将其映射,以便查询仅执行一次,并且可以在内存中构建必要的对象图。

我还需要进行快速获取,因为我将传递对象图,因此Hibernate会话可能不在范围内。

如何仍能避免N + 1问题,因为它渴望获取并且不愿意编写自己的sql连接。

解决方法

JPA具有联接获取的概念,您可以使用它。您可以在Hibernate文档中找到有关此信息的更多信息:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#fetching-strategies-dynamic-fetching