如何指定复杂的排序属性作为PageRequest参数?

时间:2018-07-19 15:33:46

标签: java spring spring-boot spring-data-jpa jpql

我的PageRequest就是这样

PageRequest pageReq = new PageRequest(0, 1, Direction.DESC, "lastDate-firstDate");

但是当我运行代码时,会出现这样的错误

  

“排序表达式'lastDate-firstDate:DESC'必须仅包含在select子句中使用的属性引用或别名。

这里firstDate和lastDate是实体列的名称,我想获取在上一个和第一个Date之间差异最大的实体。

有什么想法,上面的代码有什么问题吗?

1 个答案:

答案 0 :(得分:0)

使用以下类似的方法进行真正的复杂排序

PageRequest.of(0, 1, Sort.by(Arrays.asList(Order.desc("lastDate"), Order.desc("firstDate"))));

但是,由于它们都朝着相同的方向,因此可以通过示例来完成诸如此类的简单操作。

PageRequest.of(0, 1, Direction.DESC, "lastDate", "firstDate");

实际上再次查看您的问题,我认为您正在尝试通过两个属性的差异(减号)进行排序。考虑到这一点,我怀疑您需要将其添加到选择标准中,如下所示。

"select lastDate - firstDate as timeDiff FROM table"

此时,您可以按两者之间的差异进行排序。我怀疑这样做可能需要您使用@Query,并且几乎肯定会要求您使用诸如findAllOrderBy之类的东西来代替findAll(即,您需要更改查询本身)。