下面是來自DynamoDB的Java庫中最重要的代碼:
for (final DynamoDBMapperFieldModel<T,Object> field : fields.values()) {
for (final String indexName : field.globalSecondaryIndexNames(RANGE)) {
final GlobalSecondaryIndex gsi = map.get(indexName);
if (gsi == null) {
throw new DynamoDBMappingException(
targetType.getSimpleName() + "[" + field.name() + "]; no HASH key for GSI " + indexName
);
}
gsi.withKeySchema(new KeySchemaElement(field.name(), RANGE));
}
}
通知調用final GlobalSecondaryIndex gsi = map.get(indexName);
。 DynamoDB正在嘗試使用您在註釋中定義的索引名稱來查詢包含該對象值的映射,並且它將顯示爲null。當地圖中不存在值時,null始終是來自java地圖的響應,但您仍然要求它。
這應該提示我們。值的映射中的indexName
條目沒有映射或沒有與其關聯的值。這意味着indexName
在GlobalSecondaryIndex的索引名稱的表的聲明中出現錯誤,或者在DynamoDBTable類中使用DynamoDBIndexHashKey
對GSI進行了註釋時,註釋是錯誤的。
對我個人而言,有一個非常小的差異:userId-Index
被定義在我的CreateTable
請求中,但該字段被註釋爲userId-index
。請注意0中套管的不同。
因此,總結 - 如果您收到此錯誤 - 雙重,三重和四重檢查所有與索引名稱相關的註釋。