回过头来,我在使用内连接获取子实体时遇到了问题。
Not able to fetch child entities using inner join in spring data jpa
我现在面临的问题有点不同。
@Query("select t1 from Department t1 inner join t1.employee t2 where t1.deptHead = :deptHead and t1.departmentId = :deptId and t2.isActive != 'N')
public Department fetchDepartmentByActiveEmployees(@Param(deptId) Long deptId, @Param(deptHead) String deptHead);
使用@Fetch(FetchType.Join)
@Query("select t1 from Department t1 inner join t1.employee t2 where t1.deptHead = :deptHead and t2.isActive != 'N')
public List<Department> fetchDepartmentByActiveEmployees(@Param(deptId) Long deptId, @Param(deptHead) String deptHead);
当仅使用deptHead作为查询参数时,我将获得重复记录。
我的一个解决方案是使用Set for one-many mapping而不是list。
但是,如果我这样做,我必须做很多代码更改,我想避免。 还有其他选择吗?
当我用dept_head查询时,我应该得到一个大小为2的列表,而我得到的是大小为8的列表。
答案 0 :(得分:-1)
您正在查询部门表,并且有4名员工属于该部门(dept_head = Ram),因此您将从部门表中获取重复记录
dept_head dept_name employee_name
--------- ----------- ---------------
Ram Electrical X
Ram Electrical Y
Ram Electronics A
Ram Electronics B
您可以在查询之前使用 distinct子句来获取唯一的部门。
即使是正常的SQL查询也会返回相同的内容。 检查Here
@Query("select distinct t1 from Department t1 inner join t1.employee t2 where t1.deptHead = :deptHead and t2.isActive != 'N')
正如@hadi j在评论中所建议的那样。