带有 DynamoDB 注释的 Lombok 注释

use*_*591 7 lombok amazon-dynamodb

我有一个像这样的 DAO:

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

        @DynamoDBIndexHashKey(globalSecondaryIndexName="index_name")
        @DynamoDBRangeKey
        private String field2;
    }
Run Code Online (Sandbox Code Playgroud)

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

mko*_*bit 5

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

您正在调用load映射到调用的方法GetItem。在DynamoDBMapper试图映射根据您的注解请求。你的类有@DynamoDBRangeKey注释,GetItem调用需要完整的主键来获取项目,这意味着映射器将为对象构建主键。

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

TL;DRload()转换为GetItem需要 hashKey 和 rangeKey 的 API,因为这两个注释都存在于您的类中。