Class StaticTableSchema<T>

  • All Implemented Interfaces:
    TableSchema<T>

    @ThreadSafe
    public final class StaticTableSchema<T>
    extends WrappedTableSchema<T,​StaticImmutableTableSchema<T,​T>>
    Implementation of TableSchema that builds a schema based on directly declared attributes and methods to get and set those attributes. Just like StaticImmutableTableSchema which is the equivalent implementation for immutable objects, this is the most direct, and thus fastest, implementation of TableSchema.

    Example using a fictional 'Customer' data item class:-

    
     static final TableSchema<Customer> CUSTOMER_TABLE_SCHEMA =
          StaticTableSchema.builder(Customer.class)
            .newItemSupplier(Customer::new)
            .addAttribute(String.class, a -> a.name("account_id")
                                              .getter(Customer::getAccountId)
                                              .setter(Customer::setAccountId)
                                              .tags(primaryPartitionKey()))
            .addAttribute(Integer.class, a -> a.name("sub_id")
                                               .getter(Customer::getSubId)
                                               .setter(Customer::setSubId)
                                               .tags(primarySortKey()))
            .addAttribute(String.class, a -> a.name("name")
                                              .getter(Customer::getName)
                                              .setter(Customer::setName)
                                              .tags(secondaryPartitionKey("customers_by_name")))
            .addAttribute(Instant.class, a -> a.name("created_date")
                                               .getter(Customer::getCreatedDate)
                                               .setter(Customer::setCreatedDate)
                                               .tags(secondarySortKey("customers_by_date"),
                                                     secondarySortKey("customers_by_name")))
            .build();