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 중국어 웹사이트의 기타 관련 기사를 참조하세요!