我正在尝试通过 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)