を使用してバージョン管理の属性を持つ新しいアイテム私はスカラ座保存DynamoDBMapper
@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
}
}
で、次のDynamoDBのアイテムを持っている私は、しかし
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)
を次のようにテーブルに新しいDynamoItemを保存しようとしています私はセーブコールでConditionalCheckFailedException
を得ることになります。私はすでに検証/行っている もの:
私は、項目がすでに(それのnull)テーブルに存在しないことを確認しました。
null属性が削除されないようにSaveBehaviorとして
UPDATE_SKIP_NULL_ATTRIBUTES
を使用しました。価値があるものについては、SaveBehaviorとしてUPDATE
を使用すると同じ例外が発生します。- また、新しいオブジェクトのバージョンを0Lと1Lに設定しようとしました。再度同じ例外があります。
したがって、DynamoDBMapperを使用してバージョン管理された属性を持つ新しいオブジェクトを保存するにはどうすればよいですか?これは、オプティミスティックロックを使用しており、アイテムが既に存在する場合はConditionFailedCheckException
で失敗し、それ以外の場合はバージョン1の新しいアイテムを作成することで成功するという意味でputIfAbsentセマンティクスを得ることを望んでいるためです。
スカラーではなく上記のモデルでJavaクラスを試しましたか? – notionquest