【发布时间】:2020-03-04 14:26:38
【问题描述】:
我正在执行一项性能调整任务,我发现 JPA N+1 查询是性能问题的根本原因。我将查询更改为使用 JOIN FETCH 来解决 N+1 问题。对于 OneToMany 映射及其单向,所有实体关系都使用 FetchType.LAZY 进行映射, 表示我没有在子实体上设置 ManyToOne。
现在,如果 N+1,则触发单个 JOIN 查询。但是当事务性 ejb 方法返回时,突然所有 N+1 个查询都被触发了。当我调试时,我发现了一种行为,即如果我更改事务边界,则在退出该事务方法时会触发 N+1 个查询。
我已经面对这个问题两天了。我真的很累,尝试了所有方法。我尝试了条件查询、JPQL 查询、删除事务(导致另一个异常)
我错过了什么吗?因为 N+1 是非常流行的问题,当然解决方案也是众所周知的。
我使用 OpenJPA 作为实现 (JPA2.1) 和 DB2 作为数据库。
非常感谢您对此的任何帮助
【问题讨论】: