从springboot

时间:2018-01-14 17:17:55

标签: spring-boot amazon-dynamodb

我有一个使用AWS DynamoDb表的Spring启动应用程序,该表包含一个项目列表:

@DynamoDBTable(tableName = MemberDbo.TABLENAME)
public class MemberDbo {

    public static final String TABLENAME = "Member";

    @NonNull
    @DynamoDBHashKey
    @DynamoDBAutoGeneratedKey
    protected String id;

    // some more parameters

    @DynamoDBAttribute
    private List<String> membergroupIds;

}

我想找到属于一个特定groupId的所有成员。在最好的情况下,我想像这样使用CrudRepository:

@EnableScan
public interface MemberRepository extends CrudRepository<MemberDbo, String> {

    List<MemberDbo> findByMembergroupIdsContaining(String membergroupIds); // actually I want to filter by ONE groupId

}

不幸的是,上面的查询无效(java.lang.String cannot be cast to java.util.List

  • 有关如何使用CrudRepository构建正确查询的任何建议吗?
  • 有关如何使用Amazon SDK或其他一些Springboot兼容方法创建查询的任何建议吗?
  • 或者我可以以某种方式创建dynamoDb索引并按该索引过滤吗?
  • 或者我是否需要以编程方式创建和维护一个包含membergroupIds和成员之间映射的新表(这会导致代码和成本上的大量开销)?

CrudRepository的解决方案是首选,因为我可以在将来的版本中使用Paging,而CrudRepository可以轻松支持分页。

1 个答案:

答案 0 :(得分:1)

如果我理解正确,这看起来很容易。您使用DynamoDBMapper进行模型持久性。

您有一个成员对象,其中包含成员组列表,您要做的就是从数据库中检索它。如果是这样,使用DynamoDBMapper你会做这样的事情:

AmazonDynamoDB dynamoDBClient = new AmazonDynamoDBClient();
DynamoDBMapper mapper = new DynamoDBMapper(dynamoDBClient);
MemberDbo member = mapper.load(MemberDbo.class, hashKey, rangeKey);
member.getMembergroupIds();

您需要替换hashKey和rangeKey的位置。如果没有,可以省略rangeKey。

DynamoDBMapper也支持开箱即用的paging

DynamoDBMapper是一个优秀的模型持久性工具,它具有强大的功能,使用简单,而且由AWS编写,它与DynamoDB无缝集成。它的创造者也明显受到春天的影响。简而言之,我将使用DynamoDBMapper进行模型持久化,并将Spring Boot用于模型控制器。