0

我有一个分页 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”。所以下一次,分页会被折腾,因为查询将不再产生相同的结果集。

知道如何解决这个问题吗?

4

1 回答 1

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 从“新/失败”变为“成功”。无论如何,这只是一个建议……我的真实感受是,如果数据集发生了变化,那么可能你的分页并没有真正关闭,而你只是想错了。

于 2013-11-01T06:06:25.510 回答