JPA 的 n+1 问题是不是与 @OneToMany 或 @ManyToOne 或两者有关?

Posted

技术标签:

【中文标题】JPA 的 n+1 问题是不是与 @OneToMany 或 @ManyToOne 或两者有关?【英文标题】:Is JPA's n+1 problem related to @OneToMany or to @ManyToOne or both?JPA 的 n+1 问题是否与 @OneToMany 或 @ManyToOne 或两者有关? 【发布时间】:2021-11-18 15:29:24 【问题描述】:

当然有很多关于n+1 JPA 问题的文章以及这里的问答,其中一些从@OneToMany 的角度讨论这个问题,另一些从@ManyToOne 的角度讨论这个问题是否与两者相关?

@OneToMany:当查询实体中的字段集合注释为@OneToMany

@ManyToOne:当查询实体的字段注释为@ManyToOne

【问题讨论】:

【参考方案1】:

即使是 @OneToOne 在延迟加载时也是如此。

如果您加载实体与一个或多个实体有关系的实体列表,则会出现问题。

所以第一个查询是获取列表,然后对于列表中的每个实体,JPA 将使用附加查询加载关系。

【讨论】:

以上是关于JPA 的 n+1 问题是不是与 @OneToMany 或 @ManyToOne 或两者有关?的主要内容,如果未能解决你的问题,请参考以下文章

域对象是不是与 JPA 实体相同?

使用 JPA 映射与属性的多对多关系

JPA与Hibernate的关系

简述 JPA 与 Spring Data JPA 与 Hibernate

JPA 和 Hibernate 中的 N+1 问题的解决方案是啥?

JPA 实体、Oracle 10g 和日历类型属性是不是存在问题?