2017-10-05 18 views
0

我有四個成員變量這樣一個模型類:是否進入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; 

什麼是錯誤

回答

0

我相信你正在使用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()); 
相關問題