我正在尝试有条件地将项目写入 DynamoDB 表。
我正在使用AWS SDK for Java 2.x。下面是我的代码:
PutItemEnhancedRequest<AssessmentBean> putItemRequest =
PutItemEnhancedRequest.builder(AssessmentBean.class)
.conditionExpression(sqsMsgIdNoMatch)
.item(assessment)
.build();
WriteBatch batch =
WriteBatch.builder(AssessmentBean.class)
.addPutItem(putItemRequest)
.mappedTableResource(table)
.build(); // This line throws the IllegalArgumentException
BatchWriteItemEnhancedRequest batchWriteRequest =
BatchWriteItemEnhancedRequest.builder().addWriteBatch(batch).build();
eDDBClient
.batchWriteItem(batchWriteRequest)
.whenCompleteAsync(/* not important to this question */);
如上面代码中的注释所示,我的代码抛出一个IllegalArgumentException
:
java.lang.IllegalArgumentException:映射器扩展在 PutItem 请求中插入了 conditionExpression,作为 BatchWriteItemRequest 的一部分。DynamoDb 不支持此功能。一个已知的扩展是 VersionedRecordExtension 除非被覆盖,否则默认加载。要解决此问题,请使用其中没有版本化属性或不加载违规扩展的表模式。
以下是一些类型信息:
putItemRequest
是一个software.amazon.awssdk.enhanced.dynamodb.model.PutItemEnhancedRequest
对象batch
是一个software.amazon.awssdk.enhanced.dynamodb.model.WriteBatch
对象batchWriteRequest
是一个software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteItemEnhancedRequest
对象eDDBClient
是一个software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient
对象
如何正确有条件地将项目写入 DynamoDB?