0

我正在尝试有条件地将项目写入 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?

4

0 回答 0