是否进入DynamoDB取决于您的应用程序的模型类?
我有四个成员变量这样一个模型类:是否进入DynamoDB取决于您的应用程序的模型类?
A.java
1.Attribute-1
2.Attribute-2
3.Attribute-3
4.Attribute-4
现在我做项目的DynamoDB和条目走成功,我可以看到的条目会。
现在我对模型进行一些更改并添加2个更多的属性。
5.Attribute-5
6.Attribute-6
而在应用程序中,我设置了这两个属性的值。 现在,当我尝试插入一些条目到应用程序,然后我得到这个错误。
com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException;
什么是错误
我相信你正在使用DynamoDBMapper
类AWS SDK JAVA与save()
方法。 1)首先,是的,当您在现有项目上执行更新时,需要在模型对象中设置关键值。 save()
或者执行创建或更新其次项目
2),保存方法具有节省行为配置。您需要设置的行为因此根据你的使用情况
公共无效保存(T对象, DynamoDBSaveExpression saveExpression, DynamoDBMapperConfig配置)
UPDATE(默认):更新将不会影响 保存操作的未建模属性,并且建模属性的空值将从DynamoDB中的该项中删除 。由于updateItem 请求的限制,当 仅保存一个仅保留键的对象时,UPDATE的实现将发送一个putItem请求,并且如果给定的键已经存在于表中,它将发送另一个updateItem 请求。
UPDATE_SKIP_NULL_ATTRIBUTES:除了它忽略 与UPDATE类似的任何空值属性(S),并且不会从该项目中 DynamoDB删除它们。它还保证只发送一个updateItem 请求,而不管该对象是否只有键。
CLOBBER:CLOBBER 将在保存时清除并替换所有属性,包括未建模的属性, (删除并重新创建)。版本化的字段约束也将被忽略。 saveExpression参数 中指定的任何选项都将覆盖由版本控制属性引起的任何约束。
示例代码: -
Movies movies = new Movies();
//setting the partition and sort key
movies.setYearKey(1999);
movies.setTitle("MyMovie BOOL");
//New attribute added
movies.setProducts(Stream.of("prod1").collect(Collectors.toSet()));
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);
//Set the save behavior, so that it wouldn't impact the existing attributes. Refer the full definition above
dynamoDBMapper.save(movies, SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES.config());