我在「userId」上有一個名爲「product」的全局二級索引的DynamoDB表。主鍵位於「id」上。 我試圖用「userID」GSI上的「withExclusiveStartKey」實現查詢分頁。 不過,我得到以下情況例外,當我通過一個有效的lastId:DyanmoDB:在全局二級索引上使用「withExclusiveStartKey」分頁
獨家啓動密鑰必須具有相同的尺寸表的主要模式 (服務:AmazonDynamoDBv2;狀態代碼:400;錯誤代碼: ValidationException;請求ID: 822db97e-04a3-4c36-8c72-6008e2693679)
我在做什麼錯在這裏?
public QueryResultPage<Product> findPaged(String userId,int limit,String lastId) {
DynamoDBMapper mapper = new DynamoDBMapper(dynamoDb);
Map<String, AttributeValue> vals = new HashMap<>();
vals.put(":valUserId", new AttributeValue().withS(userId));
DynamoDBQueryExpression<Product> queryExp = new DynamoDBQueryExpression<Product>()
.withKeyConditionExpression("userId = :valUserId")
.withIndexName(ModelConsts.TBL_PRODUCT_GSI_USERID)
.withExpressionAttributeValues(vals)
.withScanIndexForward(false)
.withConsistentRead(false)
.withLimit(limit);
if (lastId != null) {//paging
Map<String, AttributeValue> exclusiveStartKey = new HashMap<String, AttributeValue>();
exclusiveStartKey.put("id", new AttributeValue().withS(lastId));
queryExp = queryExp.withExclusiveStartKey(exclusiveStartKey);
}
QueryResultPage<Product> result = mapper.queryPage(Product.class, queryExp);
return result;
}