【问题标题】:DynamoDBMappingException: no mapping for HASH keyDynamoDBMappingException:没有 HASH 键的映射
【发布时间】:2017-03-14 23:54:40
【问题描述】:

在编写 DynamoDB Java 应用程序时,如果未正确配置表及其数据模型,则在从表中写入或检索时,您可能会收到“无 HASH 键映射”错误。完整的例外类似于:

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

【问题讨论】:

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


    【解决方案1】:

    确保您的带注释映射类的 getter 声明为 public

    【讨论】:

    • 谢谢!谢谢!谢谢!
    【解决方案2】:

    在这里检查两个有用的东西:

    1) 对于散列键值的主要设置器,请确保正确设置了 @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);
    

    上面的表定义创建了一个表'testtable',其主索引或哈希键变量标题为id,字符串类型为S

    此外,如果您使用继承,请确保您没有两个同名的函数相互覆盖。 Dynamo 将使用顶级 getter,这可能会导致问题。

    【讨论】:

    • 如果我在抽象类中有我的 HashKey 属性并且最终的数据结构继承了它怎么办?我得到同样的错误。如何解决。
    【解决方案3】:

    如果您使用@Data注解(lombok.data),请在删除后重试,并为所有属性(包括primary_key/partition_key)生成getter和setter。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-26
      • 2017-06-28
      相关资源
      最近更新 更多