Class StaticImmutableTableSchema<T,B>

java.lang.Object
software.amazon.awssdk.enhanced.dynamodb.mapper.StaticImmutableTableSchema<T,B>
All Implemented Interfaces:
TableSchema<T>

@ThreadSafe public final class StaticImmutableTableSchema<T,B> extends Object implements TableSchema<T>
Implementation of TableSchema that builds a schema for immutable data objects based on directly declared attributes. Just like StaticTableSchema which is the equivalent implementation for mutable objects, this is the most direct, and thus fastest, implementation of TableSchema.

Example using a fictional 'Customer' immutable data item class that has an inner builder class named 'Builder':- static final TableSchema<Customer> CUSTOMER_TABLE_SCHEMA = StaticImmutableTableSchema.builder(Customer.class, Customer.Builder.class) .newItemBuilder(Customer::builder, Customer.Builder::build) .addAttribute(String.class, a -> a.name("account_id") .getter(Customer::accountId) .setter(Customer.Builder::accountId) .tags(primaryPartitionKey())) .addAttribute(Integer.class, a -> a.name("sub_id") .getter(Customer::subId) .setter(Customer.Builder::subId) .tags(primarySortKey())) .addAttribute(String.class, a -> a.name("name") .getter(Customer::name) .setter(Customer.Builder::name) .tags(secondaryPartitionKey("customers_by_name"))) .addAttribute(Instant.class, a -> a.name("created_date") .getter(Customer::createdDate) .setter(Customer.Builder::createdDate) .tags(secondarySortKey("customers_by_date"), secondarySortKey("customers_by_name"))) .build();

  • Method Details

    • builder

      public static <T, B> StaticImmutableTableSchema.Builder<T,B> builder(Class<T> itemClass, Class<B> builderClass)
      Creates a builder for a StaticImmutableTableSchema typed to specific immutable data item class.
      Parameters:
      itemClass - The immutable data item class object that the StaticImmutableTableSchema is to map to.
      builderClass - The builder class object that can be used to construct instances of the immutable data item.
      Returns:
      A newly initialized builder
    • builder

      public static <T, B> StaticImmutableTableSchema.Builder<T,B> builder(EnhancedType<T> itemType, EnhancedType<B> builderType)
      Creates a builder for a StaticImmutableTableSchema typed to specific immutable data item class.
      Parameters:
      itemType - The EnhancedType of the immutable data item class object that the StaticImmutableTableSchema is to map to.
      builderType - The builder EnhancedType that can be used to construct instances of the immutable data item.
      Returns:
      A newly initialized builder
    • tableMetadata

      public StaticTableMetadata tableMetadata()
      Description copied from interface: TableSchema
      Returns the object that describes the structure of the table being modelled by the mapper. This includes information such as the table name, index keys and attribute tags.
      Specified by:
      tableMetadata in interface TableSchema<T>
      Returns:
      A TableMetadata object that contains structural information about the table being modelled.
    • mapToItem

      public T mapToItem(Map<String,AttributeValue> attributeMap, boolean preserveEmptyObject)
      Description copied from interface: TableSchema
      Takes a raw DynamoDb SDK representation of a record in a table and maps it to a Java object. A new object is created to fulfil this operation.

      If attributes are missing from the map, that will not cause an error, however if attributes are found in the map which the mapper does not know how to map, an exception will be thrown.

      In the scenario where all attribute values in the map are null, it will return null if preserveEmptyObject is true. If it's false, an empty object will be returned.

      Note that preserveEmptyObject only applies to the top level Java object, if it has nested "empty" objects, they will be mapped as null. You can use DynamoDbPreserveEmptyObject to configure this behavior for nested objects.

      API Implementors Note:

      This method must be implemented if preserveEmptyObject behavior is to be supported

      Specified by:
      mapToItem in interface TableSchema<T>
      Parameters:
      attributeMap - A map of String to AttributeValue that contains all the raw attributes to map.
      preserveEmptyObject - whether to initialize this Java object as empty class if all fields are null
      Returns:
      A new instance of a Java object with all the attributes mapped onto it.
      See Also:
    • mapToItem

      public T mapToItem(Map<String,AttributeValue> attributeMap)
      Description copied from interface: TableSchema
      Takes a raw DynamoDb SDK representation of a record in a table and maps it to a Java object. A new object is created to fulfil this operation.

      If attributes are missing from the map, that will not cause an error, however if attributes are found in the map which the mapper does not know how to map, an exception will be thrown.

      If all attribute values in the attributeMap are null, null will be returned. Use TableSchema.mapToItem(Map, boolean) instead if you need to preserve empty object.

      API Implementors Note:

      TableSchema.mapToItem(Map, boolean) must be implemented if preserveEmptyObject behavior is desired.

      Specified by:
      mapToItem in interface TableSchema<T>
      Parameters:
      attributeMap - A map of String to AttributeValue that contains all the raw attributes to map.
      Returns:
      A new instance of a Java object with all the attributes mapped onto it.
      See Also:
    • itemToMap

      public Map<String,AttributeValue> itemToMap(T item, boolean ignoreNulls)
      Description copied from interface: TableSchema
      Takes a modelled object and converts it into a raw map of AttributeValue that the DynamoDb low-level SDK can work with.
      Specified by:
      itemToMap in interface TableSchema<T>
      Parameters:
      item - The modelled Java object to convert into a map of attributes.
      ignoreNulls - If set to true; any null values in the Java object will not be added to the output map. If set to false; null values in the Java object will be added as AttributeValue of type 'nul' to the output map.
      Returns:
      A map of String to AttributeValue representing all the modelled attributes in the model object.
    • itemToMap

      public Map<String,AttributeValue> itemToMap(T item, Collection<String> attributes)
      Description copied from interface: TableSchema
      Takes a modelled object and extracts a specific set of attributes which are then returned as a map of AttributeValue that the DynamoDb low-level SDK can work with. This method is typically used to extract just the key attributes of a modelled item and will not ignore nulls on the modelled object.
      Specified by:
      itemToMap in interface TableSchema<T>
      Parameters:
      item - The modelled Java object to extract the map of attributes from.
      attributes - A collection of attribute names to extract into the output map.
      Returns:
      A map of String to AttributeValue representing the requested modelled attributes in the model object.
    • attributeValue

      public AttributeValue attributeValue(T item, String key)
      Description copied from interface: TableSchema
      Returns a single attribute value from the modelled object.
      Specified by:
      attributeValue in interface TableSchema<T>
      Parameters:
      item - The modelled Java object to extract the attribute from.
      key - The attribute name describing which attribute to extract.
      Returns:
      A single AttributeValue representing the requested modelled attribute in the model object or null if the attribute has not been set with a value in the modelled object.
    • itemType

      public EnhancedType<T> itemType()
      Description copied from interface: TableSchema
      Returns the EnhancedType that represents the 'Type' of the Java object this table schema object maps to and from.
      Specified by:
      itemType in interface TableSchema<T>
      Returns:
      The EnhancedType of the modelled item this TableSchema maps to.
    • attributeNames

      public List<String> attributeNames()
      Description copied from interface: TableSchema
      Returns a complete list of attribute names that are mapped by this TableSchema
      Specified by:
      attributeNames in interface TableSchema<T>
    • isAbstract

      public boolean isAbstract()
      Description copied from interface: TableSchema
      A boolean value that represents whether this TableSchema is abstract which means that it cannot be used to directly create records as it is lacking required structural elements to map to a table, such as a primary key, but can be referred to and embedded by other schemata.
      Specified by:
      isAbstract in interface TableSchema<T>
      Returns:
      true if it is abstract, and therefore cannot be used directly to create records but can be referred to by other schemata, and false if it is concrete and may be used to map records directly.
    • attributeConverterProvider

      public AttributeConverterProvider attributeConverterProvider()
      The table schema AttributeConverterProvider.
      See Also:
      • attributeConverterProvider
    • converterForAttribute

      public AttributeConverter<T> converterForAttribute(Object key)
      Description copied from interface: TableSchema
      AttributeConverter that is applied to the given key.
      Specified by:
      converterForAttribute in interface TableSchema<T>
      Parameters:
      key - Attribute of the modelled item.
      Returns:
      AttributeConverter defined for the given attribute key.