Java 在dynamo中,如何通过搜索hash_键来显示项目列表?
我在dynamo中有一个表,它有一个哈希键:Java 在dynamo中,如何通过搜索hash_键来显示项目列表?,java,amazon-dynamodb,Java,Amazon Dynamodb,我在dynamo中有一个表,它有一个哈希键:Name(String)和另外3个全局索引。 例如,我需要搜索并将我的Name==myNameToSearch所在的项目列表带入搜索。 但我在使用getItem获取时遇到问题。我在迪纳摩有一些东西。 我面临着这个错误: The provided key element does not match the schema (Service: DynamoDb, Status Code: 400 但我的哈希键是正确的 这里是我的班级发电机配置: @Get
Name
(String
)和另外3个全局索引。
例如,我需要搜索并将我的Name
==myNameToSearch
所在的项目列表带入搜索。
但我在使用getItem获取时遇到问题。我在迪纳摩有一些东西。
我面临着这个错误:
The provided key element does not match the schema (Service: DynamoDb, Status Code: 400
但我的哈希键是正确的
这里是我的班级发电机配置:
@Getter
@Singleton
@Slf4j
public class DynamoDBConfig {
private DynamoDbTable<MyModel> table;
public DynamoDBConfig(Config config) {
DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.builder()
.dynamoDbClient(DynamoDbClient.builder().build())
.build();
String tableName = config.getValue("myDynamoTable");
table = enhancedClient.table(tableName, TableSchema.fromBean(MyModel.class));
}
}
我的模型:
@Setter
@Getter
@NoArgsConstructor
@AllArgsConstructor
@Builder
@DynamoDbBean
@EqualsAndHashCode
public class MyModel implements Serializable {
public static final String MYNAME = "Name";
public static final String ANOTHER_FIELD_GLOBAL_INDEX = "anotherField";
@JsonProperty(MYNAME)
@Getter(onMethod_ = {@DynamoDbAttribute(MYNAME), @DynamoDbPartitionKey})
private String myName;
@JsonProperty(ANOTHER_FIELD_GLOBAL_INDEX)
@Getter(onMethod_ = {@DynamoDbAttribute(ANOTHER_FIELD_GLOBAL_INDEX)})
private LocalDate anotherField;
}
您可能误解了DynamoDB中主键的工作原理 听起来你有一个复合主键,这意味着你有一个分区键和一个排序键。
getItem
操作的工作原理是通过完整的主键(分区键和排序键)获取项目。您不能单独使用getItem通过排序键进行获取,这正是DynamoDB错误告诉您的
The provided key element does not match the schema
如果您想单独使用排序键的值进行提取,您有几个选项
scan
查找感兴趣的项目。这并不理想,但如果您无法更改数据模型,这是一个选项我无法扫描基地,因为它将有数百万个项目。有一个辅助全局索引,我可以不使用分区键进行搜索吗?您提到您有一个哈希键
name
,但我在您的代码中没有看到。你的桌子看起来像什么?该错误可能是DDB用作主键的内容与您提供给getItem操作的值不匹配。我编辑了代码
The provided key element does not match the schema