当我尝试使用dynamodb映射器保存/更新项目时,出现了conditionalcheckfailed异常。
任何人都可以使用Java共享代码片段,以演示如何成功实现版本控制和乐观锁定吗?
试图完全不设置版本! 尝试将记录添加到表中,然后在保存之前进行读取。
什么都没醒!我继续收到ConditionalCheckFailed异常。 唯一有效的方法是将配置设置为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);
}
请检查上面的代码段-这是一个新的空表。 哈希键-id,范围键-auditId,VersionField-版本。
我只想能够添加一条新记录,这就是为什么在保存新项目之前不进行任何读取。如果我能得到这个简单的案例,即向dynamodb表工作中添加一个新的/ first记录,那么我也可以实现其余用例。
答案 0 :(得分:0)
通常:
我知道您提到您已经尝试了上述方法。如果它确实是一个空表,则您的代码应该可以正常工作(减去版本的设置)。
我也会做几件事: