编写DynamoDB Java App时,您可以收到HASH密钥' no映射。如果表及其数据模型配置不正确,则从表中写入或检索时出错。完整的例外情况类似于:
com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: <YourClassNameHere>; no mapping for HASH key
答案 0 :(得分:7)
确保您的带注释的映射类的getter声明为public
。
答案 1 :(得分:5)
这里有两个有用的东西:
1)对于哈希键值的主要setter,请确保正确设置了@DynamoDBHashKey
表示法。 @DynamoDBAttribute
不适合用于表格的主哈希密钥,@DynamoDBIndexHashKey
也不是。
2)确保在表定义中定义了散列键:
CreateTableRequest createTableRequest = new CreateTableRequest()
.withTableName("testtable")
.withKeySchema(
new KeySchemaElement("id", KeyType.HASH)
)
.withProvisionedThroughput(new ProvisionedThroughput(1L, 1L))
.withAttributeDefinitions(
new AttributeDefinition("id", "S")
);
CreateTableResult result = amazonDynamoDB.createTable(createTableRequest);
上表定义创建了一个表格&test;&#39;使用标题为id
的主索引或散列键变量,字符串的类型为S
。
此外,如果您正在使用继承,请确保您没有两个具有相同名称的功能可以相互覆盖。 Dynamo将使用顶级getter,这可能会导致问题。