项目
有一个员工列表。一个Employee
有一组projectEmployeeRole。 ProjectEmployeeRole
连接到一个项目。
我想要一个项目,在一个请求中包含其所有员工和员工的 projectEmployeeRoles,以避免 N+1 问题。
我能够做到这一点:
@Query("SELECT project FROM Project project JOIN FETCH project.employees employees " +
"LEFT JOIN FETCH employees.projectEmployeeRoles role " +
"WHERE project.id = :id")
Project findProjectById(@Param("id") long id);
但我只想获取项目 id 等于参数项目 id 的角色。我尝试这样做:
@Query("SELECT project FROM Project project JOIN FETCH project.employees employees " +
"LEFT JOIN FETCH employees.projectEmployeeRoles role " +
"WHERE project.id = :id AND role.project.id = :id")
Project findProjectById(@Param("id") long id);
这正确地仅返回了项目 id 等于参数的角色,但问题是它没有返回不具有满足此条件的角色的员工。我希望它仍然返回该项目的所有员工。仅应过滤员工角色。因此,没有任何角色与条件匹配的员工仍应返回一组空的角色。
有办法吗?
最佳答案
我打赌你应该扩展你的查询。尝试这样的事情:
@Query("SELECT project FROM Project project" +
"JOIN FETCH project.employees employees " +
"JOIN FETCH employees.projectEmployeeRoles role" +
"JOIN FETCH role.project as roleproj" +
"WHERE project.id = :id AND roleproj.id = :id")
Project findProjectById(@Param("id") long id);
或者这个:
@Query("SELECT project FROM Project project" +
"JOIN FETCH project.employees employees " +
"LEFT JOIN FETCH employees.projectEmployeeRoles role" +
"JOIN FETCH role.project as roleproj" +
"WHERE project.id = :id AND roleproj.id = :id")
Project findProjectById(@Param("id") long id);
关于java - JPQL,有没有一种方法可以过滤子集合,而不同时过滤不满足条件的父集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59645141/