Amazon dynamodb 带DynamoDB注释的Lombok注释

Amazon dynamodb 带DynamoDB注释的Lombok注释,amazon-dynamodb,lombok,Amazon Dynamodb,Lombok,我有一把刀,像: @Getter @Setter @DynamoDBTable(tableName="tableName") public class DAO { @DynamoDBHashKey private String field1; @DynamoDBIndexHashKey(globalSecondaryIndexName="index_name") @DynamoDBRangeKey

我有一把刀,像:

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

        @DynamoDBIndexHashKey(globalSecondaryIndexName="index_name")
        @DynamoDBRangeKey
        private String field2;
    }
问题是,当我试图使用DAO使用DynamoDBMapper和field1作为哈希键进行加载调用以获取项时,它抛出DynamoDBException,表示: 找到公共DAO.getField2()的空键。 但实际上,表有对应于字段2的值。
问题,这是因为Lombok注释而不是手动的mutator代码,还是通常我们一起使用Lombok和dynamodban注释?

这里是一个解释和一个TL;DR

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

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


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

我没有使用Lombok,但我不明白为什么它会导致问题。听起来您只是在使用项的
hashKey
:您正在调用哪个DynamoDBMapper方法(哪个dynamodbapi)?我正在使用load()方法。实际上,当哈希和范围键组合在一起时会发生这种情况,load要求将两者都传递到表中以发出请求。因此,在这种情况下需要使用query(),因为它只允许对哈希键进行查询。这对我很有效。因此,lombok可以很好地与DynamoDB注释配合使用,因为我们可以直接注释DAO字段。是的,这就是我猜的。Lombok应该事先完成所有的魔法,DynamoDBMapper应该仍然可以访问所有注释。我认为它仍然有效的方式是,您应该要么对getter/setter进行注释,要么对字段进行注释,但不要将两者混合使用。它最终调用了
GetItem
,这两个项都需要,因此在映射程序中会出现该错误。很高兴看到你明白了!