Skip to content

Commit 6cae9ce

Browse files
committed
Added support for DynamoDbAutoGeneratedKey annotation [Fix for #5497 - ConditionalCheckFailedException with version attribute and partition key using auto-generated UUID]
1 parent fa35bfc commit 6cae9ce

File tree

3 files changed

+28
-13
lines changed

3 files changed

+28
-13
lines changed

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/extensions/AutoGeneratedKeyExtension.java

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,12 @@
3939
* Register this extension explicitly when building the {@link software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient}.
4040
* <p>
4141
* Example:
42-
* <pre>
42+
* <pre>{@code
4343
* DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
4444
* .dynamoDbClient(lowLevelClient)
45-
* .extensions(AutoGeneratedKeyExtension.create())
45+
* .extensions(AutoGeneratedKeyExtension.builder().build())
4646
* .build();
47-
* </pre>
47+
* }</pre>
4848
*/
4949
@SdkPublicApi
5050
@ThreadSafe
@@ -59,10 +59,10 @@ private AutoGeneratedKeyExtension() {
5959
}
6060

6161
/**
62-
* @return an instance of {@link AutoGeneratedKeyExtension}
62+
* Returns a new builder for {@link AutoGeneratedKeyExtension}.
6363
*/
64-
public static AutoGeneratedKeyExtension create() {
65-
return new AutoGeneratedKeyExtension();
64+
public static Builder builder() {
65+
return new Builder();
6666
}
6767

6868
/**
@@ -111,6 +111,21 @@ public static StaticAttributeTag autoGeneratedKeyAttribute() {
111111
}
112112
}
113113

114+
/**
115+
* Builder for {@link AutoGeneratedKeyExtension}.
116+
* <p>
117+
* Currently stateless, but provided to keep the extension creation consistent with other extensions and to allow future
118+
* configuration without breaking the API.
119+
*/
120+
public static final class Builder {
121+
private Builder() {
122+
}
123+
124+
public AutoGeneratedKeyExtension build() {
125+
return new AutoGeneratedKeyExtension();
126+
}
127+
}
128+
114129
/**
115130
* Validates the Java type and writes table metadata so {@link #beforeWrite} can find the tagged attributes at runtime.
116131
*/

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/extensions/AutoGeneratedKeyExtensionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public class AutoGeneratedKeyExtensionTest {
4040
private static final OperationContext PRIMARY_CONTEXT =
4141
DefaultOperationContext.create(TABLE_NAME, TableMetadata.primaryIndexName());
4242

43-
private final AutoGeneratedKeyExtension extension = AutoGeneratedKeyExtension.create();
43+
private final AutoGeneratedKeyExtension extension = AutoGeneratedKeyExtension.builder().build();
4444

4545
private static final StaticTableSchema<ItemWithKey> ITEM_WITH_KEY_SCHEMA =
4646
StaticTableSchema.builder(ItemWithKey.class)

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/functionaltests/AutoGeneratedKeyRecordTest.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public AutoGeneratedKeyRecordTest(String testName,
6464
this.mappedTable =
6565
DynamoDbEnhancedClient.builder()
6666
.dynamoDbClient(getDynamoDbClient())
67-
.extensions(AutoGeneratedKeyExtension.create())
67+
.extensions(AutoGeneratedKeyExtension.builder().build())
6868
.build()
6969
.table(RecordWithMixedUpdateBehavioursTableName, RecordWithMixedUpdateBehavioursTableSchema);
7070
}
@@ -264,7 +264,7 @@ public void regression_issue5497_autoGeneratedPartitionKey_withVersionAttribute_
264264
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
265265
.dynamoDbClient(getDynamoDbClient())
266266
.extensions(
267-
AutoGeneratedKeyExtension.create(),
267+
AutoGeneratedKeyExtension.builder().build(),
268268
VersionedRecordExtension.builder().build()
269269
)
270270
.build();
@@ -309,7 +309,7 @@ public void fieldLevel_autoGeneratedKeys_generatedOnPut_andBehaviorsOnUpdate() {
309309
String tableName = getConcreteTableName("autogen-field-ann");
310310
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
311311
.dynamoDbClient(getDynamoDbClient())
312-
.extensions(AutoGeneratedKeyExtension.create())
312+
.extensions(AutoGeneratedKeyExtension.builder().build())
313313
.build();
314314

315315
TableSchema<RecordWithMixedUpdateBehavioursWithFieldAnnotations> schema =
@@ -356,7 +356,7 @@ public void getterLevel_createdKey_WRITE_ALWAYS_manualValue_isWritten() {
356356
String tableName = getConcreteTableName("getter-created-writealways-manual");
357357
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
358358
.dynamoDbClient(getDynamoDbClient())
359-
.extensions(AutoGeneratedKeyExtension.create())
359+
.extensions(AutoGeneratedKeyExtension.builder().build())
360360
.build();
361361

362362
TableSchema<RecordWithMixedUpdateBehavioursWithGetterCreatedKeyWriteAlways> schema =
@@ -396,7 +396,7 @@ public void getterLevel_createdKey_WRITE_ALWAYS_regenerates_onUpdate() {
396396
String tableName = getConcreteTableName("getter-created-writealways");
397397
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
398398
.dynamoDbClient(getDynamoDbClient())
399-
.extensions(AutoGeneratedKeyExtension.create())
399+
.extensions(AutoGeneratedKeyExtension.builder().build())
400400
.build();
401401

402402
TableSchema<RecordWithMixedUpdateBehavioursWithGetterCreatedKeyWriteAlways> schema =
@@ -437,7 +437,7 @@ public void getterLevel_lastUpdatedKey_WRITE_IF_NOT_EXISTS_isPreserved_onUpdate(
437437
String tableName = getConcreteTableName("getter-lastupdated-writeifnotexists");
438438
DynamoDbEnhancedClient client = DynamoDbEnhancedClient.builder()
439439
.dynamoDbClient(getDynamoDbClient())
440-
.extensions(AutoGeneratedKeyExtension.create())
440+
.extensions(AutoGeneratedKeyExtension.builder().build())
441441
.build();
442442

443443
TableSchema<RecordWithMixedUpdateBehavioursWithGetterLastUpdatedKeyWriteIfNotExists> schema =

0 commit comments

Comments
 (0)