You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@DynamoDBAttribute重命名字段在DynamoDbEnhancedAsyncClient下不生效

问题解决说明

根因

AWS SDK for Java 2.x的dynamodb-enhanced模块默认的注解扫描规则是仅读取getter方法上的DynamoDB相关注解,你将@DynamoDBAttribute标注在私有成员字段上,TableSchema生成时会直接忽略该配置,最终直接使用getter方法对应的属性名id作为DynamoDB表的字段名。

修复方案

有两种可行的修复方式:

方式1:将注解转移到getter方法

将@DynamoDBAttribute注解放到getId()方法上即可,修正后的实体类代码如下:

@DynamoDbBean
public class TableEntity {
    private String id;

    public TableEntity() {
    }

    // 注意原代码构造方法存在笔误,this.is应改为this.id
    public TableEntity(String id) {
      this.id = id;
    }

    @DynamoDbPartitionKey
    @DynamoDBAttribute(attributeName = "unique_id")
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }
}

方式2:开启字段级注解扫描

如果希望保留字段上的注解配置,可以修改@DynamoDbBean注解的参数,启用字段+属性的扫描策略:

// 引入对应的枚举类:import software.amazon.awssdk.enhanced.dynamodb.mapper.annotations.DynamoDbBean.AnnotationProcessingStrategy;
@DynamoDbBean(annotationProcessingStrategy = AnnotationProcessingStrategy.PROPERTY_AND_FIELD)
public class TableEntity {
    @DynamoDBAttribute(attributeName = "unique_id")
    private String id;

    public TableEntity() {
    }

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

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

    public void setId(String id) {
        this.id = id;
    }
}

其他疑问解答

  • 同步客户端DynamoDbEnhancedClient和异步客户端的注解处理逻辑完全一致,不存在异步不支持该注解的情况,同步客户端同样遵循上述规则。
  • 你使用的2.17.75版本不存在相关功能bug,按上述方案修正后配置即可正常生效。

内容的提问来源于stack exchange,提问作者Bhushan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:15:09