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 一起使用?
这里有更多的解释和TL;DR
您正在调用load映射到调用的方法GetItem。在DynamoDBMapper试图映射根据您的注解请求。你的类有@DynamoDBRangeKey注释,GetItem调用需要完整的主键来获取项目,这意味着映射器将为对象构建主键。
由于 Lombok 已经生成了您的代码(在运行之前),因此它不会影响您已经放置的注释。而且由于您的注释是在字段上而不是将它们应用于 getter,因此它调用生成的 Lombok getter 的映射器。但是,当它尝试序列化为请求时,该 getter 正在返回,null因为您只设置了 hashKey。
TL;DR:load()转换为GetItem需要 hashKey 和 rangeKey 的 API,因为这两个注释都存在于您的类中。
| 归档时间: |
|
| 查看次数: |
6252 次 |
| 最近记录: |