提供的关键元素与模式不匹配 - java

问题描述:

不确定问题在这里。这是我在Amazon DynamoDb上的数据库。我不断得到提供的关键元素的问题与模式不匹配。我完成了debuggind,并确定所有的值都设置好了,但不知道为什么会出现这个问题。我错过了什么吗?提供的关键元素与模式不匹配 - java

enter image description here

这是代码,我其实尝试添加到数据库

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(); 
+0

如果您将代码作为格式化文本而不是图像发布,您将有更好的机会获得帮助 – andrepnh

片断这是最有可能你的数据模型和DynamoDB实际的表之间的不匹配。确保'Job'类(分区键和可选的排序键)中定义的键匹配DynamoDB中表的确切名称和类型(在您的类中由@DynamoDBTable属性定义)。例如,如果你使用下面的数据模型,并且该表ProductCatalog执行save操作有string类型的分区键Id,作为数据模型定义了密钥作为Integer DynamoDB将产生相同的异常:

@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; } 

} 

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