繁体   English   中英

Spring 数据 JDBC 请求相关表时未使用连接

[英]Spring Data JDBC not using join when requesting related tables

我在同一聚合中有 2 个链接表,但Spring 数据 JDBC不使用连接来检索数据。 它会执行几个 Select 请求,但我不明白为什么。

表格:

TestA (aggregate root)
    idA (integer, PK)
TestB
    idB (integer, PK)
    idA (integer, FK -> TestA)

实体:

@Data
public class TestA {
    @Id
    Integer idA;
    
    @MappedCollection(idColumn = "idA")
    Set<TestB> testBs = new HashSet<>();
}
@Data
public class TestB {
    @Id
    Integer idB;
}

存储库:

@Repository
public interface TestRepository extends CrudRepository<TestA, Integer> {
}

当调用testRepository.findAll()时,它检索所有数据并且对象与预期的一样(我拥有所有 TestA 以及每个 TestB 的关联列表),但它通过从 TestA 请求数据来实现,然后为每个它请求TestB 的TestA 行。

Executing prepared SQL statement [SELECT TestA.idA AS idA FROM TestA]
Executing prepared SQL statement [SELECT TestB.idB AS idB FROM TestB WHERE TestB.idA = ?]
Executing prepared SQL statement [SELECT TestB.idB AS idB FROM TestB WHERE TestB.idA = ?]
...

为什么不是一个带有 JOIN 的 Select? 我想我做错了可能很明显,但我不明白。 对我来说,据我的理解,它应该是左连接或类似的东西,从 TestA 中检索单个请求数据以及来自 TestB 的关联数据。

不,你没有做错任何事。 这就是 Spring 数据 JDBC 现在的工作方式。

该团队正在研究一种更有效的新方法来加载聚合,但还没有准备好。

如果这对您来说是个问题,您可以在@Query注释中指定自己的查询,包括专用的RowMapperResultSetExtractor

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM