使用 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
的 属性 进行排序
所以我的存储库中有这段代码(示例):
@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
的 属性 进行排序