如何在具有可分页参数的查询中进行排序

时间:2019-05-19 06:16:41

标签: hibernate spring-data-jpa

我正在将Spring批处理与hibernate和JPA结合使用,我正在尝试实现分区。

我的分区比较容易返回,它将数据切成10个块。示例从是到到10,读取1到10之间的行,如果它是20-30,则读取20到30之间的行。

我有一个简单的查询。

@Query(value="select * from (
select t1.*, rownum as rowCol from
(select * from {h-scheme}Data where processed=:flag order by col1, col2 desc) t1 where rownum < :toRow) 
where rowCol >=:fromRow",  nativeQuery=true)
public Page<Data> findByProcessedFromAndTo(@Param("flag")char flag, (@Param("fromRow")long from, (@Param("toRow")long to, Pageable page);

我首先基于from和to进行手动分页,然后我将应用常规的可分页处理数据。对于pageable,它的pageSize为10,pageNumber不断增加,并且按col1 asc和col2 desc排序。

当我运行此批处理过程时,休眠方式以某种方式无法隐藏到oracle sql中,

这就是休眠状态:

select * from(
select * from (
select t1.*, rownum as rowCol from
(select * from Data where processed=? order by col1 asc, col2 desc) t1 
where rownum < ?) where rowCol >=?, col3 asc, col4 desc) where rownum <?

为什么在fromRow参数之后,它改为添加逗号?它应该被订购。

我试图删除可分页的排序,然后它会因为缺少参数toRow而抱怨缺少右括号。 hibernate生成的sql基本已损坏。为什么休眠无法在上述查询与分页之间转换?

但是,如果我按col1,col2 desc删除订单,则两者都会从可分页的作品中添加/删除排序。

那么如何在具有分页功能的查询中添加自定义订单?我找不到任何解决办法

0 个答案:

没有答案