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)