我通过一些密集的调试解决了这个问题。事实证明,MySqlPagingQueryProvider
getSortKeysWithoutAliases()在建立要在第一页和后续页运行的SQL查询时使用了一种方法。因此,它附加
and (p.id >:_id)而不是
and (p.id >:_p.id)。稍后,当创建第二个页面排序值并将其存储在JdbcPagingItemReader的
startAfterValues字段中时,它将使用
"p.id"指定的原始String并最终将该对放入命名参数映射中
("_p.id",10)。但是,当读者尝试在查询中填写_id时,它不存在,因为读者使用了非别名删除键。长话短说,在定义排序键时,我必须删除别名引用。
provider.setSortKeys("p.id": Order.ASCENDING)必须更改为,才能使所有组件正常工作
provider.setSortKeys("id": Order.ASCENDING)


