android - 带有附加集的 aws mobilehub no-sql 批量更新
问题描述
我正在尝试通过 android 应用程序更新 dynamodb 中两个不同表的字段的属性。经过大量搜索后,我发现了这个:-
dynamoDBMapper.batchSave(modelObj1, modelObj2);
此功能正常工作,但在“更新”配置中,即删除字段中的所有其他属性,只留下更新的属性。但我希望它处于“APPEND_SET”配置中,即所有不应该更新的属性也保留在该字段中。
在处理单表更新(即不是批处理)时,我使用“SET_APPEND”配置成功更新了字段,如下所示:-
DynamoDBMapperConfig dynamoDBMapperConfig = new DynamoDBMapperConfig.Builder()
.withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
.withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.APPEND_SET)
.build();
dynamoDBMapper.save(newsItem, dynamoDBMapperConfig);
但这在 batchSave 的情况下不起作用。
这是我的代码:-
public class MainActivity extends AppCompatActivity {
static DynamoDBMapper dynamoDBMapper;
String userId;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// AWSMobileClient enables AWS user credentials to access your table
AWSMobileClient.getInstance().initialize(this).execute();
AWSCredentialsProvider credentialsProvider = AWSMobileClient.getInstance().getCredentialsProvider();
AWSConfiguration configuration = AWSMobileClient.getInstance().getConfiguration();
// Add code to instantiate a AmazonDynamoDBClient
AmazonDynamoDBClient dynamoDBClient = new AmazonDynamoDBClient(credentialsProvider);
dynamoDBMapper = DynamoDBMapper.builder()
.dynamoDBClient(dynamoDBClient)
.awsConfiguration(configuration)
.build();
batchSave();
}
public void batchSave() {
final UserInfoDO userInfoDO = new UserInfoDO();
userInfoDO.setUserId(userId);
userInfoDO.setRoomNumber(123D);
final ComplaintTableDO complaintTableDO = new ComplaintTableDO();
complaintTableDO.setComplaintId("1234567890");
complaintTableDO.setUserId(userId);
new Thread(new Runnable() {
@Override
public void run() {
DynamoDBMapperConfig dynamoDBMapperConfig = new DynamoDBMapperConfig.Builder()
.withConsistentReads(DynamoDBMapperConfig.ConsistentReads.CONSISTENT)
.withSaveBehavior(DynamoDBMapperConfig.SaveBehavior.APPEND_SET)
.build();
dynamoDBMapper.batchSave(userInfoDO,complaintTableDO, dynamoDBMapperConfig);
}
}).start();
}
}
这会产生错误:-
com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMappingException: Class class com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapperConfig must be annotated with interface com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBTable
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBReflector.getTable(DynamoDBReflector.java:172)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapperConfig$DefaultTableNameResolver.getTableName(DynamoDBMapperConfig.java:508)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.internalGetTableName(DynamoDBMapper.java:809)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.getTableName(DynamoDBMapper.java:790)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.batchWrite(DynamoDBMapper.java:1733)
at com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.batchSave(DynamoDBMapper.java:1664)
解决方案
看起来这是基于此线程的预期行为。你只需要为此进行多次往返(并行执行,因为保存阻塞)。
推荐阅读
- .htaccess - 从 htaccess 迁移到 nginx 配置失败
- scala - 如何通过akka消息转发谓词参数
- dns - 如何从 Synology NAS 上的 DHCP 更新非 Windows DNS 服务器 A 记录
- javascript - Mongoose 不使用 Promise 机制执行内部查询
- java - Play Framework:不支持 1.8 之前的 Java 版本
- excel - 验证行值和检索列的公式
- json - ColdFusion 应用程序 - 使用 mm_wizard_login.cfm 页面中的 AJAX。不返回 JSON
- javascript - 2D缩放到webgl中的点
- javascript - Redux 调度包含要从 reducer 调用的方法的操作
- antlr - 字符串插值:是否可以不添加成员?