DynamoDBAttribute 与 DynamoDbEnhancedAsyncClient 不工作

DynamoDBAttribute with DynamoDbEnhancedAsyncClient not working

使用 @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();

Table:

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

当我尝试 CreatTable:

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

我看到 table 字段名称为 id 而不是 unique_id

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

我正在使用 software.amazon.awssdk:dynamodb-enhanced:2.17.75 库。

根据文档 here,我们需要定义一个自定义架构来完成这项工作。即 DynamoDBAttribute 不适用于增强型客户端。具体使用如下TableEntityclass:

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