我有一个使用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的解决方案是首选的,因为我可能在以后的版本中使用分页,而且CrudRepository很容易支持分页。
发布于 2018-01-15 08:40:07
如果我的理解是正确的,这看起来很容易。您使用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也支持开箱即用的寻呼。
DynamoDBMapper是一个优秀的模型持久化工具,它具有强大的特性,使用简单,并且由于它是由AWS编写的,所以它与DynamoDB有着无缝的集成。它的创造者显然也受到了春天的影响。简而言之,我将使用DynamoDBMapper作为模型持久性,而Spring用于模型控制器之类的东西。
https://stackoverflow.com/questions/48252133
复制相似问题