Java 使用DynamoDBMapper保存具有版本化属性的新项
我在Scala中有以下DynamoDB项Java 使用DynamoDBMapper保存具有版本化属性的新项,java,scala,amazon-web-services,amazon-dynamodb,Java,Scala,Amazon Web Services,Amazon Dynamodb,我在Scala中有以下DynamoDB项 @DynamoDBTable(tableName = Table) class DynamoItem { private var indexId: String = _ @DynamoDBHashKey(attributeName = IndexIdAttribute) def getIndexId: String = { indexId } def setIndexId(id: String): Unit = { i
@DynamoDBTable(tableName = Table)
class DynamoItem {
private var indexId: String = _
@DynamoDBHashKey(attributeName = IndexIdAttribute)
def getIndexId: String = {
indexId
}
def setIndexId(id: String): Unit = {
indexId = id
}
private var version: Long = _
@DynamoDBVersionAttribute(attributeName = VersionAttribute)
def getVersion: Long = {
version
}
def setVersion(version: Long): Unit = {
this.version = version
}
}
我试图在表中保存一个新的发电机,如下所示
val item = new DynamoItem
item.setIndexId(id = 1L)
// Not setting any version as DynamoDBMapper is supposed to automatically
// set it to 1 for new objects
val dynamoDBMapper = new DynamoDBMapper(amazonDynamoDBClient)
val dynamoDBMapperConfig = (new DynamoDBMapperConfig.Builder).
withConsistentReads(ConsistentReads.CONSISTENT).
withSaveBehavior(SaveBehavior.UPDATE_SKIP_NULL_ATTRIBUTES).
build()
dynamoDBMapper.save(item(), dynamoDBMapperConfig)
但是,在save调用中,我最终得到了一个条件checkfailedexception
。
我已经做/验证的事情:
UPDATE\u SKIP\u NULL\u ATTRIBUTES
作为SaveBehavior,以便不删除NULL属性。无论如何,使用UPDATE
作为SaveBehavior也会给出相同的异常因此,问题是如何使用DynamoDBMapper保存具有版本化属性的新对象?我之所以需要它,是因为我正在使用乐观锁定,并希望通过它获得putIfAbsent语义(如果该项已经存在,则使用
ConditionFailedCheckException
失败,否则通过使用版本1创建新项成功).Scala的Long与DynamoDBVersionAttribute在初始保存时不兼容,因为它不可为null。初始化时,只要使用默认值0L即可。如果改为使用java.lang.Long,则可以将其初始化为null,这将使保存工作不会出现条件检查失败。您是否尝试过将java类用于上述模型而不是scala?