是否进入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参数 中指定的任何选项都将覆盖由版本控制属性引起的任何约束。

Reference link

示例代码: -

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