不确定这里是什么问题。这是我在Amazon DynamoDb上的数据库。我一直得到提供的关键元素与架构不匹配的问题。我已经完成了debuggind并确定所有的值都已设置,但不确定为什么会出现这个问题。我错过了什么吗?
这是我实际尝试添加到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();
答案 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; }
}