如何动态更改使用 DynamoDB 的 Java 映射器访问的表?
2022-09-04 00:55:36
我有几个 DynamoDB 表,所有这些表都有相同结构的条目。我想创建一个 POJO 来表示所有这些条目,然后使用 DynamoDB 的 Mapper API 来加载和保存这些对象。
问题是API需要在我的POJO上进行注释。这是一个编译时注释,需要一个表名参数,因此会阻止我以动态方式使用POJO。DynamoDBMapperConfig 似乎旨在允许这种动态行为更改。不幸的是,它不适合我:我收到一个客户端DDB错误,说我的POJO由于我在注释中放入的空字符串而无法验证。@DynamoDBTable
我反复寻找为什么我的 DynamoDBMapperConfig 没有得到尊重,但找不到任何东西。我的代码如下,精简到基本要素:
我的 POJO:
@DynamoDBTable(tableName = "") // table name must be overridden on each call
public class TableEntry {
. . .
}
我的客户:
public class MyMapper {
private final DynamoDBMapper mapper;
private final DynamoDBMapperConfig configs;
public MyMapper(String tableName) {
AmazonDynamoDBClient client = . . .;
mapper = new DynamoDBMapper(client);
configs = new DynamoDBMapperConfig.Builder()
.withTableNameOverride(TableNameOverride.withTableNameReplacement(tableName))
.build();
}
. . .
public void getEntry(String key) {
return mapper.load(TableEntry.class, key, configs);
}
}
当我运行我的代码(基本上类似于我在这里粘贴的内容)时,我收到以下消息:
2 validation errors detected: Value '' at 'tableName' failed to satisfy constraint: . . .
它接着说(1)表名太短,(2)表名与它们的正则表达式模式不匹配。
有什么建议可以解释为什么我的动态命名表不能与 DynamoDB Mapper API 配合使用?非常感谢文档参考。
[我找到了 DynamoDBMapper 检索表名称的位置,但我还没有找到任何线索。