如何在Java中使用DynamoDBEnhancedClient仅映射GSI
问题解答
可以使用仅映射partitionKey、fieldOne和fieldTwo这三个属性的类通过DynamoDBEnhancedClient查询该GSI,你提供的Java代码示例是完全可行的。
核心原因:
- 你的GSI配置为
ProjectionType.INCLUDE,仅投影了partitionKey(GSI分区键)、fieldOne(GSI排序键)和fieldTwo三个属性,和你定义的MyTable类属性完全匹配。 - DynamoDBEnhancedClient查询GSI时,只会将返回的属性映射到实体类中,不存在的属性不会干扰查询执行,也不会抛出异常。
关键注意点:
- 查询时必须明确指定要使用的GSI,示例代码如下:
DynamoDbTable<MyTable> table = enhancedClient.table("your-table-name", TableSchema.fromBean(MyTable.class)); QueryConditional queryConditional = QueryConditional.keyEqualTo(Key.builder() .partitionValue("目标分区键值") .sortValue("目标fieldOne值") .build()); PageIterable<MyTable> results = table.query(r -> r .queryConditional(queryConditional) .indexName("fieldOneGsi"));
- 若后续GSI的投影属性调整,需同步修改实体类的属性或注解,避免数据映射不完整。
内容的提问来源于stack exchange,提问作者Liumx31
相关产品推荐
相关产品推荐

