Java DDB 中复合范围键的注释
Java Annotation for composite Range Keys in DDB
我有一个 my_table
,它有一个由两个组合属性 id
和 model_name
组成的复合排序键(即 id_model_name
,与此处所做的类似 here and here).
所以我创建了这个 Java 模型:
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "my_table")
public class TableModel {
private static final String COMPOSITE_KEY_SEPARATOR = "_";
@DynamoDBAttribute(attributeName = "id")
private String id;
@DynamoDBAttribute(attributeName = "model_name")
private String modelName;
@DynamoDBRangeKey(attributeName = "id_model_name")
public String getIdModelName() {
return String.format("%s%s%s", id, COMPOSITE_KEY_SEPARATOR, modelName);
}
// more stuff...
}
但是我得到:
DynamoDBMappingException: DRTFacet[id_model_name]; could not unconvert attribute
请注意,没有 String idModelName
字段,因为它可能会与 @AllArgsConstructor
和 @Builder
混淆(因为它是派生字段)。是因为缺少此字段(连同 setter 方法吗?)。我怎样才能克服这个?
我发现提供一个虚拟 setter 解决了问题:
public void setIdModelName(final String idModelName) {}
我有一个 my_table
,它有一个由两个组合属性 id
和 model_name
组成的复合排序键(即 id_model_name
,与此处所做的类似 here and here).
所以我创建了这个 Java 模型:
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@DynamoDBTable(tableName = "my_table")
public class TableModel {
private static final String COMPOSITE_KEY_SEPARATOR = "_";
@DynamoDBAttribute(attributeName = "id")
private String id;
@DynamoDBAttribute(attributeName = "model_name")
private String modelName;
@DynamoDBRangeKey(attributeName = "id_model_name")
public String getIdModelName() {
return String.format("%s%s%s", id, COMPOSITE_KEY_SEPARATOR, modelName);
}
// more stuff...
}
但是我得到:
DynamoDBMappingException: DRTFacet[id_model_name]; could not unconvert attribute
请注意,没有 String idModelName
字段,因为它可能会与 @AllArgsConstructor
和 @Builder
混淆(因为它是派生字段)。是因为缺少此字段(连同 setter 方法吗?)。我怎样才能克服这个?
我发现提供一个虚拟 setter 解决了问题:
public void setIdModelName(final String idModelName) {}