例如,当我们想要将值立即从实体映射到 DTO 对象时,我检查了 SQL 的行为。如果我在构造函数中给出一个例子:
SELECT new Test(T) FROM Test T
我在日志中看到 2 个查询。 另一方面,如果我这样做:
SELECT new TEST(T.name, T.city) FROM TEST T
我在日志中只看到一个查询。
为什么?
SELECT new Test(T) FROM Test T
由于延迟加载 (N+1),第一个结果是一个查询来获取引用,N 个查询来获取每个实体的属性。
SELECT new TEST(T.name, T.city) FROM TEST T
第二个由于急切加载而在单个查询中检索所有数据。通过指定确切的字段,您可以让 JPA 优化查询。