[英]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
注释中指定自己的查询,包括专用的RowMapper
或ResultSetExtractor
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.