我正在将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删除订单,则两者都会从可分页的作品中添加/删除排序。
那么如何在具有分页功能的查询中添加自定义订单?我找不到任何解决办法