Java 为DynamoDB嵌套和组合注释不起作用

Java 为DynamoDB嵌套和组合注释不起作用,java,amazon-dynamodb,Java,Amazon Dynamodb,我有一个相当简单的java对象结构,带有注释,但不起作用。看起来是这样的: @DynamoDBDocument public class Job { @DynamoDBHashKey private String id; @DynamoDBAttribute(attributeName = "mapping") private Definition definition; } @DynamoDBDocument public class Definition

我有一个相当简单的java对象结构,带有注释,但不起作用。看起来是这样的:

@DynamoDBDocument
public class Job {

    @DynamoDBHashKey
    private String id;

    @DynamoDBAttribute(attributeName = "mapping")
    private Definition definition;
}

@DynamoDBDocument
public class Definition {
    @DynamoDBAttribute(attributeName = "calculationMap")
    @DynamoDBTypeConverted(converter = AssignmentsConverter.class)
    private Map<String, Calculation> assignments;
}
mapping: {
    calculationMap: {
        attribute1: "string representing Calculation",
        attribute2: "string representing Calculation"
    }
}
definition: {
    assignments: {
        attribute1: Calculation1,
        attribute2: Calculation2
    }
}
definition: {
    assignments: null
}
因此,我希望我的java作业对象如下所示:

@DynamoDBDocument
public class Job {

    @DynamoDBHashKey
    private String id;

    @DynamoDBAttribute(attributeName = "mapping")
    private Definition definition;
}

@DynamoDBDocument
public class Definition {
    @DynamoDBAttribute(attributeName = "calculationMap")
    @DynamoDBTypeConverted(converter = AssignmentsConverter.class)
    private Map<String, Calculation> assignments;
}
mapping: {
    calculationMap: {
        attribute1: "string representing Calculation",
        attribute2: "string representing Calculation"
    }
}
definition: {
    assignments: {
        attribute1: Calculation1,
        attribute2: Calculation2
    }
}
definition: {
    assignments: null
}
但是,注释无法正确地反序列化映射。转换器代码从未被调用,我最终得到一个具有映射的作业对象,但映射中的assignments字段为null。所以基本上看起来是这样的:

@DynamoDBDocument
public class Job {

    @DynamoDBHashKey
    private String id;

    @DynamoDBAttribute(attributeName = "mapping")
    private Definition definition;
}

@DynamoDBDocument
public class Definition {
    @DynamoDBAttribute(attributeName = "calculationMap")
    @DynamoDBTypeConverted(converter = AssignmentsConverter.class)
    private Map<String, Calculation> assignments;
}
mapping: {
    calculationMap: {
        attribute1: "string representing Calculation",
        attribute2: "string representing Calculation"
    }
}
definition: {
    assignments: {
        attribute1: Calculation1,
        attribute2: Calculation2
    }
}
definition: {
    assignments: null
}
转换器本身相当简单,因此除非请求,否则我不会提供代码。然而,它不应该引起问题,因为它甚至没有被调用


在我添加
@DynamoDBAttribute
注释并更改java字段的名称之前,代码运行良好。但是名称都匹配,所以我担心这可能与各种注释之间的交互有关?我真的不确定。

为了解决这个问题,我费了好几个小时的功夫,结果证明这是我的一个简单错误-我在查看DynamoDB以查看我提取的数据,但在某个时候我用null覆盖了它,没有刷新。通过刷新DynamoDB中的视图,我可以看到它现在为空。我将calculationMap重置为一个有效值,瞧,它按预期工作