为什么构造函数传递实体字段不会出现n+1问题?

问题描述 投票:0回答:1

例如,当我们想要将值立即从实体映射到 DTO 对象时,我检查了 SQL 的行为。如果我在构造函数中给出一个例子:

SELECT new Test(T) FROM Test T

我在日志中看到 2 个查询。 另一方面,如果我这样做:

SELECT new TEST(T.name, T.city) FROM TEST T

我在日志中只看到一个查询。

为什么?

java sql mysql jpa
1个回答
0
投票
SELECT new Test(T) FROM Test T

由于延迟加载 (N+1),第一个结果是一个查询来获取引用,N 个查询来获取每个实体的属性。

SELECT new TEST(T.name, T.city) FROM TEST T

第二个由于急切加载而在单个查询中检索所有数据。通过指定确切的字段,您可以让 JPA 优化查询。

© www.soinside.com 2019 - 2024. All rights reserved.