【问题标题】:How to store the same inner structure inside a DynamoDbTable如何在 DynamoDbTable 中存储相同的内部结构
【发布时间】:2022-02-06 08:36:24
【问题描述】:

我有一个名为 Customer 的类,里面有两个具有相同对象的字段。

@Value
@Builder
@DynamoDbImmutable(builder = Customer.CustomerBuilder.class)
public class Customer {
@Getter(onMethod_ = @DynamoDbPartitionKey)
String id;

@Getter(onMethod_ = {@DynamoDbFlatten, 
@DynamoDbAttribute("phone")})
Phone phone;

@Getter(onMethod_ = {@DynamoDbFlatten, 
@DynamoDbAttribute("HomePhone")})
Phone homePhone;    

电话结构

@Value
@Builder
@DynamoDbImmutable(builder = Phone.PhoneBuilder.class)
public class Phone {
String number;
....

当我将项目放入 DynamoDB 表时,它会显示

Caused by: java.lang.IllegalArgumentException: Attempt to add an attribute to a mapper that already has one with the same name. [Attribute name: number]
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.lambda$null$2(StaticImmutableTableSchema.java:184)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at java.base/java.util.Collections$UnmodifiableCollection.forEach(Collections.java:1085)
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.lambda$new$3(StaticImmutableTableSchema.java:181)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.<init>(StaticImmutableTableSchema.java:179)
at software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema.<init>(StaticImmutableTableSchema.java:77)

我应该如何存储它,尝试为字段指定不同的名称,例如通过 DynamoDbAttribute,但没有太大帮助

【问题讨论】:

  • 我认为String id; 两次只是一个错字,否则这将不是有效的 Java 代码。
  • 是的,你是对的,我在玩

标签: java amazon-web-services amazon-dynamodb


【解决方案1】:

您目前正在通过@DynamoDbFlattenphonehomePhone 展平,这会将它们的组成属性(都具有number)移动为顶级属性。您最终会得到两个名为 number 的顶级属性,从而导致冲突。

从两者中删除 @DynamoDbFlatten 并存储 phonehomePhone 以便它们变得分层。或者找到其他方法使这些属性名称唯一(例如,在属性级别重命名它们)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-29
    • 2021-09-01
    • 2022-01-18
    • 2021-11-24
    相关资源
    最近更新 更多