带有 DynamoDB 注释的 Lombok 注释

Lombok Annotations with DynamoDB annotations

我有一个像这样的 DAO:

    @Getter
    @Setter
    @DynamoDBTable(tableName="tableName")
    public class DAO {
        @DynamoDBHashKey
        private String field1;

        @DynamoDBIndexHashKey(globalSecondaryIndexName="index_name")
        @DynamoDBRangeKey
        private String field2;
    }

问题是当我尝试使用 DAO 使用 DynamoDBMapper 以 field1 作为哈希键进行加载调用以获取项目时,它抛出 DynamoDBException 说: 为 public DAO.getField2() 找到空键 但实际上 table 具有对应于 field2 的值。 问题,这是因为 Lombok 注释而不是手动修改器代码,还是通常我们一起使用 Lombok 和 DynamoDBAnnotations?

这里有更多的解释和 TL;DR

您正在调用 load 方法,该方法映射到 GetItem 调用。 DynamoDBMapper 正在尝试根据您的注释映射该请求。您的 class 具有 @DynamoDBRangeKey 注释,并且 GetItem 调用需要完整的主键才能获取项目,这意味着映射器将为对象构建主键。

由于 Lombok 已经生成了您的代码(在运行前),因此它不会影响您已经放置的注释。而且由于您的注释是在字段上而不是将它们应用到 getters,因此它调用生成的 Lombok getter 的映射器。但是,当它尝试序列化为请求时,getter 返回 null 因为您只设置了 hashKey。

TL;DR: load() 转换为 GetItem API 这需要 hashKey 和 rangeKey 因为两个注释都存在于你的 class.