我有一个使用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的解决方案是首选,因为我可以在将来的版本中使用Paging,而CrudRepository可以轻松支持分页。
答案 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用于模型控制器。