DynamoDBMappingException:没有HASH密钥的映射

时间:2017-03-14 23:54:41

标签: java amazon-web-services amazon-dynamodb

编写DynamoDB Java App时,您可以收到HASH密钥' no映射。如果表及其数据模型配置不正确,则从表中写入或检索时出错。完整的例外情况类似于:

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: <YourClassNameHere>; no mapping for HASH key

2 个答案:

答案 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,这可能会导致问题。