Spring数据JPA按计算字段排序
我有一个实体,其中包含跑步数据-日期、距离、持续时间和一些额外的数据:Spring数据JPA按计算字段排序,jpa,spring-data-jpa,spring-data,Jpa,Spring Data Jpa,Spring Data,我有一个实体,其中包含跑步数据-日期、距离、持续时间和一些额外的数据: @Entity class RunEntry { private Long id; private LocalDate date; private int weekNo; private Long distance; private Duration duration; private Long userId; // getters, setters } 基于这些数据,我必须创建一份报告,其中
@Entity
class RunEntry {
private Long id;
private LocalDate date;
private int weekNo;
private Long distance;
private Duration duration;
private Long userId;
// getters, setters
}
基于这些数据,我必须创建一份报告,其中将包含每周距离和平均速度(这就是为什么我添加weekNo列以方便分组):
为此,我创建了一个Spring数据JPA投影,其中包含weekNo、距离总和和持续时间总和:
interface RunPerWeek {
int getWeekNo();
Long getSumOfDistance();
Long getSumOfDuration();
}
我在存储库中创建了一个简单的方法:
@Query("select r.weekNo as weekNo, sum(r.distance) as sumOfDistance, sum(r.duration) as sumOfDuration "
+ "from RunEntry r where r.userId = :userId group by r.weekNo")
Page<RunPerWeek> findRunPerWeekForUser(Long userId, Pageable pageable)
@Query(“选择r.weekNo作为weekNo,选择sum(r.distance)作为sumOfDistance,选择sum(r.duration)作为sumOfDuration”
+“来自RunEntry r,其中r.userId=:userId group by r.weekNo”)
Page findRunPerWeekForUser(长用户ID,可分页,可分页)
它工作正常,我可以使用此查询结果并将其映射到AverageWeekRun(通过基于weekNo计算一周的开始/结束,以及基于距离和持续时间之和计算平均速度)
但是,我希望使用从pageable到order的排序,按平均速度或按周开始或周结束日期排序。这些字段是计算字段,所以当我尝试使用sort传递它时,会出现异常。怎么解决呢??我希望用户使用AverageWeekRun类中的字段名,但其中一些是经过计算的,Spring数据JPA无法处理
@Query("select r.weekNo as weekNo, sum(r.distance) as sumOfDistance, sum(r.duration) as sumOfDuration "
+ "from RunEntry r where r.userId = :userId group by r.weekNo")
Page<RunPerWeek> findRunPerWeekForUser(Long userId, Pageable pageable)