Я получаю исключение условной проверки при попытке сохранить / обновить элементы с помощью динамического преобразователя.
Может ли кто-нибудь поделиться фрагментом кода с использованием java, который может продемонстрировать, как можно успешно реализовать управление версиями и оптимистическую блокировку?
Попробовал вообще не устанавливать версию !!Попытался добавить запись в таблицу, а затем выполнить чтение перед сохранением.
Ничего не проснулось !!Я продолжаю получать ConditionalCheckFailed Exception.Единственное, что работает, если я установил конфиг на COBBLER !!но это не то, чего я хочу, так как мне нужна оптимистическая блокировка для моих данных.
Класс элементов БД ---
@DynamoDBTable(tableName="Funds")
public class FundsItem {
private String id;
private String auditId;
private Long version;
private String shopId;
private String terminalId;
private String txId;
@DynamoDBHashKey(attributeName = "Id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@DynamoDBRangeKey(attributeName = "AuditId")
public String getAuditId() {
return auditId;
}
public void setAuditId(String auditId) {
this.auditId = auditId;
}
@DynamoDBVersionAttribute(attributeName = "Version")
public Long getVersion() { return version; }
public void setVersion(Long version) { this.version = version; }
@DynamoDBAttribute(attributeName = "ShopId")
public String getShopId() {
return shopId;
}
public void setShopId(String shopId) {
this.shopId = shopId;
}
@DynamoDBAttribute(attributeName = "TerminalId")
public String getTerminalId() { return terminalId; }
public void setTerminalId(String terminalId) {
this.terminalId = terminalId;
}
@DynamoDBAttribute(attributeName = "TxId")
public String getTxId() {
return txId;
}
public void setTxId(String txId) {
this.txId = txId;
}
}
Код для сохранения нового элемента -----
public long addFunds(FundsRequest request){
FundsItem dbItem = new FundsItem();
String Id = request.getShopId().trim() + request.getTerminalId().trim();
String V0_Audit_Rec = "V0_Audit_" + Id;
//save V0 item.
dbItem.setVersion((long) 1);
dbItem.setId(Id);
dbItem.setAuditId(V0_Audit_Rec);
dbItem.setShopId(request.getShopId().trim());
dbItem.setTerminalId(request.getTerminalId().trim());
dbItem.setTxId(request.getTxId().trim());
mapper.save(dbItem);
}
Пожалуйста, проверьте фрагмент выше - это новая пустая таблица.hashkey - id, rangekey - auditId, VersionField - version.
Я просто хочу иметь возможность добавить новую запись, поэтому не делаю чтения перед сохранением нового элемента.Если я смогу получить этот простой случай, то есть добавить новую / первую запись в работу таблицы Dynamodb, я смогу реализовать и остальные варианты использования.