Я пытаюсь обновить атрибуты полей двух разных таблиц в DynamodB через приложение Android.После долгих поисков я обнаружил следующее: -
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)