Annotation Type DynamoDbImmutable


@Target(TYPE) @Retention(RUNTIME) public @interface DynamoDbImmutable
Class level annotation that identifies this class as being a DynamoDb mappable entity. Any class used to initialize a ImmutableTableSchema must have this annotation. If a class is used as an attribute type within another annotated DynamoDb class, either as a document or flattened with the DynamoDbFlatten annotation, it will also require this annotation to work automatically without an explicit AttributeConverter.

Attribute Converter Providers
Using AttributeConverterProviders is optional and, if used, the supplied provider supersedes the default converter provided by the table schema.

Note:

  • The converter(s) must provide AttributeConverters for all types used in the schema.
  • The table schema DefaultAttributeConverterProvider provides standard converters for most primitive and common Java types. Use custom AttributeConverterProviders when you have specific needs for type conversion that the defaults do not cover.
  • If you provide a list of attribute converter providers, you can add DefaultAttributeConverterProvider to the end of the list to fall back on the defaults.
  • Providing an empty list {} will cause no providers to get loaded.
Example using attribute converter providers with one custom provider and the default provider:
 
 (converterProviders = {CustomAttributeConverter.class, DefaultAttributeConverterProvider.class});
 
 

Example using DynamoDbImmutable:

 
 @DynamoDbImmutable(builder = Customer.Builder.class)
 public class Customer {
     private final String accountId;
     private final int subId;
     private final String name;
     private final Instant createdDate;

     private Customer(Builder b) {
         this.accountId = b.accountId;
         this.subId = b.subId;
         this.name = b.name;
         this.createdDate = b.createdDate;
     }

     // This method will be automatically discovered and used by the TableSchema
     public static Builder builder() { return new Builder(); }

     @DynamoDbPartitionKey
     public String accountId() { return this.accountId; }

     @DynamoDbSortKey
     public int subId() { return this.subId; }

     @DynamoDbSecondaryPartitionKey(indexNames = "customers_by_name")
     public String name() { return this.name; }

     @DynamoDbSecondarySortKey(indexNames = {"customers_by_date", "customers_by_name"})
     public Instant createdDate() { return this.createdDate; }

     public static final class Builder {
         private String accountId;
         private int subId;
         private String name;
         private Instant createdDate;

         private Builder() {}

         public Builder accountId(String accountId) { this.accountId = accountId; return this; }
         public Builder subId(int subId) { this.subId = subId; return this; }
         public Builder name(String name) { this.name = name; return this; }
         public Builder createdDate(Instant createdDate) { this.createdDate = createdDate; return this; }

         // This method will be automatically discovered and used by the TableSchema
         public Customer build() { return new Customer(this); }
     }
 }
 
 
  • Required Element Summary

    Required Elements
    Modifier and Type
    Required Element
    Description
    The builder class that can be used to construct instances of the annotated immutable class
  • Optional Element Summary

    Optional Elements
    Modifier and Type
    Optional Element
    Description
     
  • Element Details

    • converterProviders

      Class<? extends AttributeConverterProvider>[] converterProviders
      Default:
      {software.amazon.awssdk.enhanced.dynamodb.DefaultAttributeConverterProvider.class}
    • builder

      Class<?> builder
      The builder class that can be used to construct instances of the annotated immutable class