Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用DynamoDBMapper保存具有版本化属性的新项_Java_Scala_Amazon Web Services_Amazon Dynamodb - Fatal编程技术网

Java 使用DynamoDBMapper保存具有版本化属性的新项

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

我在Scala中有以下DynamoDB项

@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
。 我已经做/验证的事情:

  • 我验证了该项在表中不存在(为null)

  • 我使用
    UPDATE\u SKIP\u NULL\u ATTRIBUTES
    作为SaveBehavior,以便不删除NULL属性。无论如何,使用
    UPDATE
    作为SaveBehavior也会给出相同的异常

  • 我还尝试将新对象的版本设置为0L和1L。同样的例外

  • 因此,问题是如何使用DynamoDBMapper保存具有版本化属性的新对象?我之所以需要它,是因为我正在使用乐观锁定,并希望通过它获得putIfAbsent语义(如果该项已经存在,则使用
    ConditionFailedCheckException
    失败,否则通过使用版本1创建新项成功).

    Scala的Long与DynamoDBVersionAttribute在初始保存时不兼容,因为它不可为null。初始化时,只要使用默认值0L即可。如果改为使用java.lang.Long,则可以将其初始化为null,这将使保存工作不会出现条件检查失败。

    您是否尝试过将java类用于上述模型而不是scala?