Skip to content

Added support for @DynamoDbUpdateBehavior on attributes within nested objects#6708

Open
anasatirbasa wants to merge 8 commits intoaws:masterfrom
anasatirbasa:feature/added-support-for-updateBehavior-annotations-in-nested-objects
Open

Added support for @DynamoDbUpdateBehavior on attributes within nested objects#6708
anasatirbasa wants to merge 8 commits intoaws:masterfrom
anasatirbasa:feature/added-support-for-updateBehavior-annotations-in-nested-objects

Conversation

@anasatirbasa
Copy link
Contributor

@anasatirbasa anasatirbasa commented Feb 4, 2026

Description

Added support for @DynamoDbUpdateBehavior on attributes within nested objects. The @DynamoDbUpdateBehavior annotation will only take effect for nested attributes when using IgnoreNullsMode.SCALAR_ONLY.

Motivation and Context

@DynamoDbUpdateBehavior to work on nested objects too.

Modifications

Support for @DynamoDbUpdateBehavior on nested attributes was implemented by accounting for the two possible representations of nested objects during update operations:

  • Complete map updates: Nested objects may be treated as whole maps, depending on the operation type and the configured IgnoreNullsMode.
  • Flattened attribute updates: When IgnoreNullsMode.SCALAR_ONLY is used, nested attributes are flattened using the internal _NESTED_ATTR_UPDATE_ marker. This behavior is handled in UpdateItemOperation.transformItemToMapForUpdateExpression.

Both scenarios are now supported, and the same generated timestamp is applied consistently across both top-level and nested attributes.

In parallel, the evaluation of the IgnoreNullsMode parameter within update requests was reviewed and refined. As part of this change:

  • UpdateExpressionUtils now evaluates the @DynamoDbUpdateBehavior annotation only when IgnoreNullsMode.SCALAR_ONLY is configured.
  • The annotation is applied exclusively to flattened nested attributes identified by the _NESTED_ATTR_UPDATE_ marker.
  • Applying @DynamoDbUpdateBehavior to lists of nested objects is explicitly not supported, as DynamoDB update operations replace the entire list and do not allow updates to individual list elements.

Testing

Existing test coverage was updated where necessary, and additional tests were introduced to validate the new behavior across nested object scenarios and different IgnoreNullsMode configurations.

Test Coverage on modified classes:

image

Test Coverage Checklist

Scenario Done Comments if Not Done
1. Different TableSchema Creation Methods
a. TableSchema.fromBean(Customer.class) [x]
b. TableSchema.fromImmutableClass(Customer.class) for immutable classes [x]
c. TableSchema.documentSchemaBuilder().build() [x]
d. StaticTableSchema.builder(Customer.class) [x]
**2. Nesting of Different TableSchema Types ** (Ref-1)
a. @DynamoDbBean with non-null nested @DynamoDbBean attribute [x]
b. @DynamoDbBean with non-null nested @DynamoDbImmutable attribute [ ]
c. @DynamoDbImmutable with non-null nested @DynamoDbBean attribute [ ]
d. @DynamoDbBean with null nested @DynamoDbBean attribute [x]
e. @DynamoDbBean with null nested @DynamoDbImmutable attribute [ ]
f. @DynamoDbImmutable with null nested @DynamoDbBean attribute [ ]
3. CRUD Operations (Ref-2) Existing tests passed
a. scan() [ ]
b. query() [ ]
c. updateItem() [x]
d. putItem() [x]
e. getItem() [x]
f. deleteItem() [ ]
g. batchGetItem() [ ]
h. batchWriteItem() [ ]
i. transactGetItems() [ ]
j. transactWriteItems() [ ]
4. Null Handling for Different Attribute types (Ref-3)
a. top-level null attributes [x]
b. collections with null elements [ ]
c. maps with null values [ ]
d. full serialization/deserialization cycle with null values [ ]
5. AsyncTable and SyncTable Existing tests passed
a. DynamoDbAsyncTable Testing [ ]
b. DynamoDbTable Testing [x]
6. New/Modification in Extensions
a. Tables with Scenario in ScenarioSl No.1 (All table schemas are Must) [x]
b. Test with Default Values in Annotations [x]
c. Combination of Annotation and Builder passes extension [x]
7. New/Modification in Converters Not impacted, existing tests passed
a. Tables with Scenario in ScenarioSl No.1 (All table schemas are Must) [ ]
b. Test with Default Values in Annotations [ ]
c. Test All Scenarios from 1 to 5 [ ]

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)

Checklist

  • I have read the CONTRIBUTING document
  • Local run of mvn install succeeds
  • My code follows the code style of this project
  • My change requires a change to the Javadoc documentation
  • I have updated the Javadoc documentation accordingly
  • I have added tests to cover my changes
  • All new and existing tests passed
  • I have added a changelog entry. Adding a new entry must be accomplished by running the scripts/new-change script and following the instructions. Commit the new file created by the script in .changes/next-release with your changes.
  • My change is to implement 1.11 parity feature and I have updated LaunchChangelog

License

  • I confirm that this pull request can be released under the Apache 2 license

@anasatirbasa anasatirbasa force-pushed the feature/added-support-for-updateBehavior-annotations-in-nested-objects branch from 4c585a0 to 6f6f15b Compare February 4, 2026 05:27
@anasatirbasa anasatirbasa force-pushed the feature/added-support-for-updateBehavior-annotations-in-nested-objects branch from 6f6f15b to 3e5c890 Compare February 4, 2026 05:46
@anasatirbasa anasatirbasa marked this pull request as ready for review February 4, 2026 07:55
@anasatirbasa anasatirbasa requested a review from a team as a code owner February 4, 2026 07:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

Comments