带有 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.
我有一个像这样的 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.