我有一个分页的HQL查询,它从状态为NEW或FAILED的表中提取记录:
public List<Integer> getPendingItems(int channelId, int start, int pageSize) {
Query query = sessionFactory.getCurrentSession().createQuery(
"select cit.id
from Item cit
where cit.channel.id = :channelId and (cit.statusCode = 'NEW' or cit.statusCode = 'FAILED')");
query.setParameter("channelId", channelId);
query.setMaxResults(pageSize);
query.setFirstResult(start);
return query.list();
}
此查询返回的初始记录由服务处理,但问题是,记录的statusCode更新为“SUCCESS”或“FAILED”。所以下一次,分页会进行折腾,因为查询将不再产生相同的结果集。
知道如何解决这个问题吗?
答案 0 :(得分:0)
public List<Integer> getPendingItems(int channelId, int start, int pageSize) {
Query query = sessionFactory.getCurrentSession().createQuery(
"select cit.id
from Item cit
where cit.channel.id = :channelId and (cit.statusCode = 'NEW' or cit.statusCode = 'FAILED' or ID = 'successId' or ID = 'otherSuccessId' or ID = 'thirdSuccessId')");
query.setParameter("channelId", channelId);
query.setMaxResults(pageSize);
query.setFirstResult(start);
return query.list();
}
我的编辑是它所说的部分:
或ID ='successId'或ID ='otherSuccessId'或ID ='thirdSuccessId'
我建议您可以跟踪客户端中哪些ID从“新/失败”更改为“成功”。无论如何,这只是一个建议......我的真实感觉是,如果数据集发生了变化,那么也许你的分页并没有真正关闭,你只是想错了。