在从Spring-Boot:2.7.4迁移到Spring-Boot:3.0.9的过程中,我注意到EntityGraphJpaSpecificationExecutor.findOne(Specification<T> spec, EntityGraph entityGraph)
没有完全解决OneToMany集合。
在spring-boot:2.7.4中,这一点运行得很好。我在迁移说明中找不到关于这个问题的任何信息。
这可以在小演示中看到。当调用findOne(with(authorId), entityGraph)
时,并不是所有的书都为作者解析-测试将失败。
我希望所有延迟获取的OneToMany
细节都能得到解决。
你可以在这里找到小演示:https://github.com/da-von/spring-boot-jpa-findOne
当记录生成的SQL查询时,可以看到left join
与fetch first ? rows only
限制相结合。这对我来说似乎没有意义,因为QuestityGraph可以是动态的,并且结果也必须完全解析为依赖细节。
select a1_0.id,b1_0.author_id,b1_0.id,b1_0.genre,b1_0.isbn,b1_0.title,a1_0.name
from author a1_0
left join book b1_0 on a1_0.id=b1_0.author_id
where a1_0.id=?
fetch first ? rows only
字符串
- 本地机器:MacBook Pro,macOS Ventura:13.4.1
java:17
本地现有虚拟机temurin-17.jdk
spring-boot:3.0.9
个com.cosium.spring.data:spring-data-jpa-entity-graph:3.0.1
个- Docker镜像中的Postgres
Postgres:13-alpine
1条答案
按热度按时间syqv5f0l1#
已解决!具有以下功能的存储库接口:
字符串
AuthorRepository和BookRepository扩展了这个接口,执行被覆盖的
findOne(...)
变体:型
解决方案提交到示例存储库https://github.com/Cosium/spring-data-jpa-entity-graph