AWS SDK V2 DynamoDB增强客户端自动生成ID字段方案咨询
DynamoDB增强客户端(V2)实现ID自动生成方案
DynamoDB增强客户端(V2)确实没有直接对应V1版本DynamoDBAutoGeneratedKey的注解,以下是几种在模型类内实现ID自动生成的可行方案:
方案1:利用@Builder自动生成ID
由于你的模型类已经使用@Builder注解,可以通过自定义Builder为id字段设置默认值,创建对象时若不指定id则自动生成UUID:
@Data @Builder @AllArgsConstructor @NoArgsConstructor @DynamoDbBean public class Person { private String id; private String personName; // 自定义Builder,为id设置默认生成逻辑 public static class PersonBuilder { private String id = UUID.randomUUID().toString(); } @DynamoDbPartitionKey @DynamoDbAttribute(value = "id") public String getId() { return id; } @DynamoDbAttribute(value = "personName") public String getPersonName() { // 修正原方法名,符合JavaBean规范 return personName; } }
使用示例:Person.builder().personName("张三").build(),此时id会自动生成。
方案2:通过构造器初始化ID
可以在构造器中添加逻辑,当传入的id为空时自动生成UUID:
@Data @Builder @AllArgsConstructor @NoArgsConstructor @DynamoDbBean public class Person { private String id; private String personName; // 无参构造器自动生成ID public Person() { this.id = UUID.randomUUID().toString(); } // 全参构造器处理空ID场景 public Person(String id, String personName) { this.id = id != null ? id : UUID.randomUUID().toString(); this.personName = personName; } @DynamoDbPartitionKey @DynamoDbAttribute(value = "id") public String getId() { return id; } @DynamoDbAttribute(value = "personName") public String getPersonName() { return personName; } }
方案3:直接初始化字段
在id字段声明时直接设置默认值,对象创建时自动生成ID,从DynamoDB加载已有数据时框架会自动覆盖该值,不会产生冲突:
@Data @Builder @AllArgsConstructor @NoArgsConstructor @DynamoDbBean public class Person { // 直接初始化ID private String id = UUID.randomUUID().toString(); private String personName; @DynamoDbPartitionKey @DynamoDbAttribute(value = "id") public String getId() { return id; } @DynamoDbAttribute(value = "personName") public String getPersonName() { return personName; } }
注意
原代码中的personName()方法不符合JavaBean规范,需改为getPersonName(),否则DynamoDB增强客户端可能无法正确映射字段。
内容的提问来源于stack exchange,提问作者Ace McCloud
相关产品推荐
相关产品推荐

