使用dynamoDb的DynamoDBMapper我需要执行以下操作:
1.检查具有已知leaderId和userId的Follower是否已添加到Follower表中
2.如果找到这样的追随者 - 将其状态改为" ACTIVE"
3.如果找不到这样的追随者 - 用给定的leaderId / followerId存储新的追随者并声明" ACTIVE"
随着我们使用州管理工作流程,将在整个申请中使用关注者的状态 (我们尽量不删除数据库中的任何数据。)
简化"追随者"类:
public class Follower {
@DynamoDBHashKey
@DynamoDBAutoGeneratedKey
private String id;
private String leaderId;
private String followerId;
private String state;
}
我目前的解决方案是 1.使用DynamoDBMapper加载符合给定leaderID / followerId参数的Follower-s列表 2.如果没有结果 - 我们生成一个新的追随者,否则我们更新现有的一个
但是我希望在一个DynamoDBMapper调用中能够更加优雅""解决方案存在。
public void follow(String leaderId, String followerId) {
Follower follower = findFollower(leaderId, followerId);
if(follower == null){
follower = new Follower();
follower.setLeaderId(leaderId);
follower.setFollowerId(followerId);
} else {
follower.getBase().setState("ACTIVE");
}
getDbMapper().save(follower);
}
答案 0 :(得分:1)
您可以使用DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES
。
我之前遇到过同样的问题。我可以使用以下功能解决它。
/**
* It's either save or update if the record is exist using param Follower data
*
* @param Follower object of the follower data
*/
private static void saveOrUpdateAccountOperation(Follower followerData) {
AmazonDynamoDBClient amazonDynamoDBClient;
if (CognitoSyncClientManager.getInstance().isUserLogin()) {
amazonDynamoDBClient = new AmazonDynamoDBClient(CognitoSyncClientManager.getInstance().getCredentialsProvider());
} else {
amazonDynamoDBClient = new AmazonDynamoDBClient(AWSMobileClient.defaultMobileClient().getIdentityManager().getCredentialsProvider());
}
// UPDATE_SKIP_NULL_ATTRIBUTES is similar to UPDATE, except that it ignores any null value attribute(s) and will NOT remove them from that item in DynamoDB.
DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(amazonDynamoDBClient,
new DynamoDBMapperConfig(DynamoDBMapperConfig.SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES));
// create or update the existing record
dynamoDBMapper.save(followerData);
}
您只需将您的追随者对象传递给此功能,它将照顾您的所有三个条件。
谢谢。