使用 Pageable 和不在 Select 子句中的字段对查询进行排序

Sort query using Pageable with fields that is not in Select clause

所以我的存储库中有这段代码(示例):

@Query("SELECT distinct s FROM Model1 ss LEFT JOIN ss.model2 s "
Page<Model2> methodName(long customerId, Pageable pageable);

Model1 中我有一个字段 LocalDate lastDate。 如果我按 Model2 中的字段排序(通过使用 Pageable),代码执行正常 但如果我需要按 model1 字段排序(例如按 lastDate),我会收到错误“无法解析 属性”。如果我在“Select”中添加此字段,我也会收到错误“无法转换为 class Model2”。我能为它做些什么?我不想添加“Order by”子句,也不想将这个字段“lastDate”添加到 Model1。还有其他方法可以解决这个问题吗?

P.S 使用以下方法签名指定可分页对象:

public PageRequest(int page, int size, Direction direction, String... properties)

你不能。

您正在 returning Model2,其中没有关于 lastDate 的信息,所以 JPA 怎么知道?

您也不能将它添加到您的 SELECT 语句中,因为 return 实体的类型 Model2 再次不理解 lastDate.

您的 Model2 需要理解 lastDate 才能sort/page。

在 JPA 中,为了能够按特定字段排序,该字段必须是 select 语句中 returned 实体的一部分。您无法使用未 returned

的 属性 进行排序