使用@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
相关产品推荐
相关产品推荐

