DynamoDB分页

时间:2018-09-18 03:42:07

标签: java pagination amazon-dynamodb

我正在DynamoDb中进行分页,并且看到结果不符合我的预期,但是我仍然不知道代码中的错误。 我已经搜索了该文档,发现我只需要设置我从上次请求获得的上次评估密钥的评估密钥就可以传递到下一个请求。 这是我的代码:

public QueryResultPage<SbmBookingInfo> getListBooking(String email, int size,
        String lastTimeStamp, String lastBookingId, boolean isForward) {
    DynamoDBMapper mapper = new DynamoDBMapper(getClient());
    Map<String, AttributeValue> expressionAttributeValues = new HashMap<>();
    expressionAttributeValues.put(":email", new AttributeValue().withS(email));
    if (lastBookingId == null) {
        DynamoDBQueryExpression<SbmBookingInfo> queryExpression = new DynamoDBQueryExpression<SbmBookingInfo>()
                .withIndexName("practitioner-index").withKeyConditionExpression("email=:email")
                .withExpressionAttributeValues(expressionAttributeValues).withConsistentRead(false).withLimit(size);
        QueryResultPage<SbmBookingInfo> result = mapper.queryPage(SbmBookingInfo.class, queryExpression);
        m_log.info("Last evaluated key " + result.getLastEvaluatedKey());
        return result;
    } else {
        Map<String, AttributeValue> lastEvaluatedKey = new HashMap<>();
        lastEvaluatedKey.put("timeStamp", new AttributeValue().withN(lastTimeStamp));
        lastEvaluatedKey.put("bookingId", new AttributeValue().withN(lastBookingId));
        lastEvaluatedKey.put("email", new AttributeValue().withS(email));
        DynamoDBQueryExpression<SbmBookingInfo> queryExpression = new DynamoDBQueryExpression<SbmBookingInfo>().withLimit(size)
                .withIndexName("practitioner-index").withKeyConditionExpression("email=:email")
                .withExpressionAttributeValues(expressionAttributeValues).withConsistentRead(false)
                .withScanIndexForward(isForward).withExclusiveStartKey(lastEvaluatedKey);
        m_log.info("Exclusive key" + queryExpression.getExclusiveStartKey());
        return mapper.queryPage(SbmBookingInfo.class, queryExpression);

    }

}
  • 该表具有三个键:bookingId是hashkey,索引:email,timeStamp是rangeKey。
  • 我通过发出第一个请求来检查此功能,然后接收到最后一个评估密钥,然后通过传递我收到的信息来发出第二个请求,但似乎不起作用。
  • 在这种情况下,请帮助我。谢谢

0 个答案:

没有答案