提供的关键元素与架构不匹配 - java

时间:2016-04-03 16:44:20

标签: java amazon-dynamodb

不确定这里是什么问题。这是我在Amazon DynamoDb上的数据库。我一直得到提供的关键元素与架构不匹配的问题。我已经完成了debuggind并确定所有的值都已设置,但不确定为什么会出现这个问题。我错过了什么吗?

enter image description here

这是我实际尝试添加到db

中的代码片段
final Job job = new Job();
job.setDescription(txtDescription.getText().toString());
job.setType("Job entry");
job.setPrice(500);
job.setDate((new Date()).getTime());
job.setId("1");
job.setPosterID("poster");
Thread thread = new Thread(new Runnable(){
    @Override
    public void run() {
        try {
            DynamoDBMapper mapper = new DynamoDBMapper(ActivityMain.getAWSClient(getActivity()));
            mapper.save(job);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});
thread.start();

2 个答案:

答案 0 :(得分:2)

注意对象类中的@DynamoDBHashKey和@DynamoDBAttribute。 不要在它们之间混淆。第一个用于模式的键,第二个用于常规属性。即使您尝试仅设置密钥而不使用其他属性,然后尝试将其上传到dynamodb,您将获得异常。当然,它与你可以附加到属性的其他“@”标签相关。

答案 1 :(得分:1)

这很可能是您的数据模型与DynamoDB中的实际表格不匹配。确保在“工作”中定义的密钥。 class(分区键和可选的排序键)匹配DynamoDB中表的确切名称和类型(在您的类中由@DynamoDBTable属性定义)。例如,如果您使用下面的数据模型执行save操作,并且表ProductCatalog具有类型为Id的分区键string,则DynamoDB将生成相同的异常因为数据模型将密钥定义为Integer

@DynamoDBTable(tableName="ProductCatalog")
public static class CatalogItem {
   private Integer id;
   private String title;

   //Partition key
   @DynamoDBHashKey(attributeName="Id")
   public Integer getId() { return id; }
   public void setId(Integer id) { this.id = id; }

  @DynamoDBAttribute(attributeName="Title")
  public String getTitle() { return title; }    
  public void setTitle(String title) { this.title = title; }

}