首页 >Java >java教程 >如何解决JPA和Hibernate中的N 1问题?

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

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

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

解决 JPA 和 Hibernate 中的 N 1 问题

当执行过多的查询来检索关系数据时,就会出现 N 1 问题。例如,在 Hibernate 中,初始查询获取 N 条记录,并且需要 N 个附加查询来检索每条记录的关联记录。

要解决此问题,请使用 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();

此 JOIN FETCH 急切获取后关联,从而消除了 N 1 个查询。

如果需要获取多个子关联,在初始查询中获取一个集合,并在后续查询中获取其他集合。

自动检测

集成测试非常适合检测 N 1 问题。 db-util 项目提供了自动 JUnit 断言来验证生成的 SQL 语句的预期数量:

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

    Assert.assertCountOfSqlStatementsPerformed(1);
}

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

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