首页 > 解决方案 > 如何避免 JPQL 查询执行多个 SQL 查询?

问题描述

我有两个对象客户端和过程。一个客户端可以有一个程序列表,一个程序只能链接到一个客户端。

在客户端中,我有一个临时属性 nbProcedure,用于存储客户端的过程数。

我使用 Spring data JPA,带有以下查询:

@Query("SELECT new Client(c, count(p)) 
        FROM Procedure p 
        INNER JOIN p.client c 
        WHERE c.userId = ?1 
        GROUP by c.id")
fun getByUserIdOrderByNameWithNbProcedure(userId: String): List<Client>

我在日志中看到此查询已执行,但之后每行执行一个查询以选择客户端的所有属性。

如何避免按行进行所有查询,只执行一个查询?

我想,我错过了配置或滥用new Client(c, count(p))

标签: spring-data-jpa

解决方案


这可能是因为实体中未初始化延迟获取关联。可以使用JOIN FETCH而不是JOIN避免多次查询。


推荐阅读