gpt4 book ai didi

java - DynamoDBMappingException GSI 没有 HASH 键

转载 作者:行者123 更新时间:2023-11-30 02:28:51 29 4
gpt4 key购买 nike

Dynamo 抛出的这个错误非常模糊,但有一种方法可以快速缩小问题范围。引发此错误的代码可以在 https://github.com/aws/aws-sdk-java/blob/master/aws-java-sdk-dynamodb/src/main/java/com/amazonaws/services/dynamodbv2/datamodeling/DynamoDBMapperTableModel.java 找到。

这是目前唯一关于“GSI 没有 HASH 键”的 Google 搜索结果,这就是我受到启发而创作这篇文章的原因。

最佳答案

以下是 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 条目没有映射或没有与之关联的值。这必定意味着 GlobalSecondaryIndex 索引名称的表声明中的 indexName 错误,或者 DynamoDBTable 类中的注释错误,其中 GSI 使用 DynamoDBIndexHashKey 进行注释。

对于我个人来说,存在一个非常小的差异:userId-Index 是在我的 CreateTable 请求中定义的,但该字段被注释了 userId-index >。请注意 Index 中大小写的不同。

总而言之,如果您收到此错误,请仔细检查与索引名称相关的所有注释。

关于java - DynamoDBMappingException GSI 没有 HASH 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44770329/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com