JPA 投影查询不带其他独立字段的字段列表

时间:2021-07-30 09:41:49

标签: jpa spring-data-jpa

我已经浏览了许多链接,例如:Spring JPA selecting specific columns,但这是我的模型。我正在使用 Spring Boot 2.0.0

@Entity
@Table
public class Employee{
   @Id
   private Long employeeId;
   ....
   ....
   @OneToMany(mappedBy = "departmentId", cascade = CascadeType.ALL)
   private List<Department> departments;
   ..
   ...
   ...
   ...
   ...
   ...
}

我写过类似的项目

public class EmployeeDto{
    public Long getEmployeeId();

    public List<Department> getDepartments();
}

当我开发 JPARepositoryQuery 时,我得到了整个对象。事实上,我只需要EmployeeId 和departmentIds 列表就可以了。

@Query("SELECT s.employeeId, s.departments FROM Employee s WHERE s.employeeId = :employeeId")
EmployeeDto findProjectionByEmployeeId(@Param("employeeId") Long employeeId);

我们如何限制只能获取两个字段?

2 个答案:

答案 0 :(得分:0)

答案很简单:那是不可能的。

您的查询结果将是一个带有 id 和 Department 的所有字段的笛卡尔积。

答案 1 :(得分:0)

您已经知道employeeId,所以只需了解部门

@Query("SELECT empl.departments FROM Employee empl WHERE empl.employeeId = :employeeId")
List<Department> findDepartmentsByEmployeeId(@Param("employeeId") Long employeeId);