java 如何支持使用Sping Boot 对未与另一实体Map的字段进行排序和过滤

raogr8fs  于 2023-06-04  发布在  Java
关注(0)|答案(1)|浏览(109)

我有一个实体Person,它有字段id,name,email
另一个具有字段id,name,personid的实体Employee(存储person的字符串id,但未与person表Map)
现在,我想得到分页列表,其中包含人名,员工ID,员工姓名沿着搜索和排序的基础上的人名和员工姓名动态。即,用户可以按人员姓名或员工姓名排序,并按人员姓名或员工姓名或两者进行筛选
在查询格式中,我们可以这样写:

select emp.id,emp.name,p.name from employee emp join person p on
emp.personid=p.id

该查询返回预期的输出,但为了实现搜索和排序,我无法使用投影,因为Employee实体中的personid没有与Person实体的idMap。
不应使用条件生成器,并且不能更改实体。
如果有人能提供一个最好的和最优的解决方案,以获得所需的分页结果,支持排序和过滤,将不胜感激。

5gfr0r5j

5gfr0r5j1#

您可以使用order by子句修改现有查询并传递Pageable,例如下面是按员工姓名排序的示例:

@Query("select emp.id,emp.name,p.name from employee emp join person p on emp.personid=p.id order by emp.name")
Page<YourDto> findAllOrderByEmployyNamePersonName(Pageable pageable);

对于按员工姓名过滤,只需添加where子句:

@Query("select emp.id,emp.name,p.name from employee emp join person p on emp.personid=p.id where emp.name = :empName")
Page<YourDto> findByEmployeeName(String empName, Pageable pageable);

相关问题