什么是Hibernate N+1性能问题?

19-02-03 banq
              

N + 1是一个可能导致严重性能损失的问题,为了消除它,你必须找到/识别它,但这并不总很容易,但这里列举导致N + 1的最常见场景之一。

描述: N + 1是一个延迟抓取的问题(但是,急切加载也不能免除)。如果您没有机会看到它的运行情况,这个应用程序将再现N + 1行为。为了避免N + 1,最好依靠JOIN + DTO。

关键点:

  • 定义两个实体,Category并Product,建立@OneToMany关系
  • 延迟获取所有Product,所以没有Category(导致1个查询)
  • 循环获取的Product集合,并为每个条目获取相应的Category(结果N查询) 

输出结果:

源代码可以在这里找到  。