首页  >  文章  >  Java  >  如何解决JPA和Hibernate中的N 1问题?

如何解决JPA和Hibernate中的N 1问题?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-14 18:54:02654浏览

How to Solve the N+1 Problem in JPA and Hibernate?

Tackling the N+1 Problem in JPA and Hibernate

The N+1 issue arises when excessive queries are executed to retrieve relational data. For instance, in Hibernate, an initial query fetches N records, and N additional queries are needed to retrieve associated records for each.

To resolve this problem, utilize JOIN FETCH:

List<PostComment> comments = entityManager.createQuery(
    "select pc from PostComment pc join fetch pc.post p where pc.review = :review"
)
.setParameter("review", review)
.getResultList();

This JOIN FETCH eager-fetches the post association, eliminating the N+1 queries.

If multiple child associations need fetching, fetch one collection in the initial query and the others with subsequent queries.

Automatic Detection

Integration testing is ideal for detecting the N+1 issue. The db-util project provides an automatic JUnit assert to validate the expected count of SQL statements generated:

@Test
public void shouldNotHaveANPlusOneQuery() {
    // code to configure and execute db-util

    Assert.assertCountOfSqlStatementsPerformed(1);
}

以上是如何解决JPA和Hibernate中的N 1问题?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn