2016-04-03 68 views
0

不確定問題在這裏。這是我在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

回答

1

片斷這是最有可能你的數據模型和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; } 

} 
2

請注意對象類中的@DynamoDBHashKey和@DynamoDBAttribute。 不要混淆在他們之間。第一個是模式的關鍵,第二個是規則屬性。即使您嘗試僅設置密鑰並且未使用其他屬性,然後嘗試將其上傳到dynamodb,您也會收到異常。當然它與其他可以附加到屬性的「@」標籤有關。