【问题标题】:Solving N+1 hibernate problem on a nested one to many relational tables在嵌套的一对多关系表上解决 N+1 休眠问题
【发布时间】:2019-12-15 05:11:05
【问题描述】:

我有一个组织表、部门表和员工表。 一个组织有很多部门,一个部门有很多员工。 在执行 findByOrganizationId(PK of Organization) 时,我看到 Employee 表也被查询了 n 次,其中 n 是组织的部门数。

如何避免在执行相同操作时获取 Employee 数据? 我在这里看到一个 N+1 问题。但不确定如何在嵌套的一对多映射中避免它。

获取类型设置为 LAZY。

@OneToMany(mappedBy = "department", orphanRemoval = true, cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@Fetch(FetchMode.JOIN)
private List<Employee> employee;

【问题讨论】:

    标签: sql hibernate join spring-data-jpa fetch


    【解决方案1】:

    原因是@Fetch(FetchMode.JOIN) 推翻了fetch = FetchType.LAZY,因为它变成了fetch = FetchType.EAGER。尝试去掉fetch注解,不会查询N+1关系。

    【讨论】:

    • 嗨,我尝试删除 @Fetch(FetchMode.JOIN) 它给出了以下错误。原因:org.hibernate.LazyInitializationException:未能延迟初始化角色集合:com.sales.Employee,无法初始化代理 - 没有会话
    • 请提供组织模型代码和findByOrganizationId方法的调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2021-07-29
    • 1970-01-01
    • 2019-07-31
    相关资源
    最近更新 更多