提供的关键元素与模式不匹配 - java
问题描述:
不确定问题在这里。这是我在Amazon DynamoDb上的数据库。我不断得到提供的关键元素的问题与模式不匹配。我完成了debuggind,并确定所有的值都设置好了,但不知道为什么会出现这个问题。我错过了什么吗?提供的关键元素与模式不匹配 - java
这是代码,我其实尝试添加到数据库
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();
答
片断这是最有可能你的数据模型和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,您也会收到异常。当然它与其他可以附加到属性的“@”标签有关。
如果您将代码作为格式化文本而不是图像发布,您将有更好的机会获得帮助 – andrepnh