Amazon web services 在Java中创建新的DynamoDB表时使用DynamoDBVersionAttribute

Amazon web services 在Java中创建新的DynamoDB表时使用DynamoDBVersionAttribute,amazon-web-services,amazon-dynamodb,optimistic-locking,Amazon Web Services,Amazon Dynamodb,Optimistic Locking,我试图添加一个DynamoDBVersionAttribute,以便在访问/更新DynamoDB表中的项时合并乐观锁定。但是,我无法确定如何确切地添加version属性 似乎表明在创建表的类中将其用作注释是一种方法。但是,我们的代码库正在以类似以下格式创建新表: AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build(); DynamoDB dynamoDB = new DynamoDB(client); Lis

我试图添加一个DynamoDBVersionAttribute,以便在访问/更新DynamoDB表中的项时合并乐观锁定。但是,我无法确定如何确切地添加version属性

似乎表明在创建表的类中将其用作注释是一种方法。但是,我们的代码库正在以类似以下格式创建新表:

AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();
DynamoDB dynamoDB = new DynamoDB(client);

List<AttributeDefinition> attributeDefinitions= new 
ArrayList<AttributeDefinition>();
attributeDefinitions.add(new 
AttributeDefinition().withAttributeName("Id").withAttributeType("N"));

List<KeySchemaElement> keySchema = new ArrayList<KeySchemaElement>();
keySchema.add(new 
KeySchemaElement().withAttributeName("Id").withKeyType(KeyType.HASH));

CreateTableRequest request = new CreateTableRequest()
    .withTableName(tableName)
    .withKeySchema(keySchema)
    .withAttributeDefinitions(attributeDefinitions)
    .withProvisionedThroughput(new ProvisionedThroughput()
        .withReadCapacityUnits(5L)
        .withWriteCapacityUnits(6L));

Table table = dynamoDB.createTable(request);
AmazonDynamoDB client=AmazonDynamoDBClientBuilder.standard().build();
DynamoDB DynamoDB=新DynamoDB(客户);
列表属性定义=新建
ArrayList();
attributeDefinitions.add(新增)
AttributeDefinition().withAttributeName(“Id”).withAttributeType(“N”);
List keySchema=new ArrayList();
keySchema.add(新)
KeySchemaElement().withAttributeName(“Id”).withKeyType(KeyType.HASH));
CreateTableRequest请求=新建CreateTableRequest()
.withTableName(tableName)
.withKeySchema(keySchema)
.withAttributeDefinitions(attributeDefinitions)
.withProvisionedThroughput(新的ProvisionedThroughput()
.带读取容量(5L)
.具有书面容量单位(6L));
Table Table=dynamoDB.createTable(请求);

我无法找到如何通过上述Java代码添加VersionAttribute。它不是一个属性定义,所以不确定它去哪里。关于在CreateTable请求中在何处添加此VersionAttribute的任何指导信息?

据我所知,乐观锁定的@DynamoDBVersionAttribute注释仅适用于专为DynamoDBMapper查询建模的表。使用DynamoDBMapper并不是一种糟糕的方法,因为它有效地为DynamoDB项上的CRUD操作创建了ORM


但是,如果您现有的代码库无法使用它,那么您的下一个最佳选择可能是使用条件写入来增加版本号,前提是版本号等于您预期的版本号(即,使用您自己的乐观锁定)。不幸的是,您需要将增量/条件包含到希望被优化锁定的每次写入中。

您的代码只创建了一个表,但为了使用DynamoDBMapper访问该表,您需要创建一个表示该表的类。例如,如果表名为Users,则应创建名为Users的类,并使用注释将其链接到表

您可以保留表创建代码,但需要创建DynamoDBMapper类。然后,您可以使用DynamoDBMapper类完成所有的加载、保存和查询

创建该类后,只需给它一个名为version的字段并在其上添加注释,DynamoDBMapper就会处理其余部分