0

看起来重命名字段@DynamoDBAttribute不适用于新的DynamoDbEnhancedAsyncClient.

实体:

@DynamoDbBean
public class TableEntity {
    @DynamoDBAttribute(attributeName = "unique_id")
    private String id;

    public TableEntity() {
    }

    public TableEntity(String id) {
      this.is = id;
    }

    @DynamoDbPartitionKey
    public String getId() {
        return id;
    }

DynamoDBAsyncClient:

DynamoDbEnhancedAsyncClient dynamoDbAsyncClient = DynamoDbEnhancedAsyncClient.builder().dynamoDbClient(DynamoDbAsyncClient.builder().build()).build();

桌子:

DynamoDbAsyncTable<TableEntity> table =  dynamoDbAsyncClient.table(tableName, TableSchema.fromBean(TableEntity));

当我尝试CreatTable

table.createTable(
    CreateTableEnhancedRequest.builder()
    .provisionedThroughput(
        ProvisionedThroughput.
        builder()
       .readCapacityUnits(2L)
       .writeCapacityUnits(2L)
       .build())
   .build()
).get();

我看到一个带有字段名称id而不是unique_id.

有没有人解决过这个问题或遇到过同样的问题?我没有尝试过同步版本,但我很好奇是否有人让它与同步版本一起使用,即使用DynamoDbEnhancedClientand DynamoDbTable

我正在使用software.amazon.awssdk:dynamodb-enhanced:2.17.75图书馆。

4

1 回答 1

1

根据此处的文档,我们需要定义一个自定义模式来完成这项工作。即DynamoDBAttribute不适用于增强型客户端。具体来说,使用以下TableEntity类:

static final TableSchema<TableEntity> MY_TABLE_SCHEMA =
  TableSchema.builder(TableEntity.class)
    .newItemSupplier(TableEntity::new)
    .addAttribute(String.class, a -> a.name("unique_id")
                                      .getter(TableEntity::getId)
                                      .setter(TableEntity::setId)
                                      .tags(primaryPartitionKey()));

并按如下方式传递架构:

DynamoDbAsyncTable<TableEntity> table = dynamoDbAsyncClient.table(tableName, MY_TABLE_SCHEMA);

无需更改CreateTableRequest

于 2021-11-16T20:22:46.737 回答