public static void main()

in DynamoDB-SDK-Examples/java/WorkingWithItems/TransactWriteItem.java [15:99]


    public static void main(String[] args){

        try{

            // Create Client
            DynamoDbEnhancedClient enhancedClient = DynamoDbEnhancedClient.create();

            // Map Tables Using Bean
            DynamoDbTable<Customer> customerTable = enhancedClient.table("RetailDatabase", TableSchema.fromBean(Customer.class));
            DynamoDbTable<Product> productTable = enhancedClient.table("Product", TableSchema.fromBean(Product.class));

            // Key for Product Item
            Key key = Key.builder()
                    .partitionValue("B07J1337PJ42")
                    .build();

            // Get Product
            Product prod1 = productTable.getItem(r->r.key(key));

            // Update expression, ensure product is in stock
            final Expression expression = Expression.builder()
                    .expression("#ps = :expected")
                    .putExpressionName("#ps", "productStatus")
                    .putExpressionValue(":expected", AttributeValue.builder().s("IN_STOCK").build())
                    .build();

            // Set to sold after complete
            prod1.setProductStatus("SOLD");

            // UpdateItem Request with Condition
            UpdateItemEnhancedRequest updateItemEnhancedRequest =
                    UpdateItemEnhancedRequest.builder(Product.class)
                            .item(prod1)
                            .conditionExpression(expression)
                            .ignoreNulls(true)
                            .build();

            // Create Address
            HashMap<String,String> address1 = new HashMap<>();
            address1.put("road", "89105 Bakken Rd");
            address1.put("city", "Greenbank");
            address1.put("state", "WA");
            address1.put("pcode", "98253");
            address1.put("country","USA");

            // Create Customer
            Customer cust1 =new Customer.Builder("vikram.johnson@somewhere.com")
                    .withSk("metadata")
                    .withUsername("vikj")
                    .withFirstName("Vikram")
                    .withLastName("Johnson")
                    .withName("Vikram Johnson")
                    .withAge(31)
                    .withAddress(address1)
                    .build();

            // Condition Expression, add customer only if customer doesn't exist
            final Expression custExpression = Expression.builder()
                    .expression("attribute_not_exists(sk)")
                    .build();
            
            // PutItem Request with Condition
            PutItemEnhancedRequest putItemEnhancedRequest = PutItemEnhancedRequest.builder(Customer.class)
                    .item(cust1)
                    .conditionExpression(custExpression)
                    .build();

            // Write both items request
            TransactWriteItemsEnhancedRequest transactWriteItemsEnhancedRequest =
                    TransactWriteItemsEnhancedRequest.builder()
                            .addUpdateItem(productTable, updateItemEnhancedRequest)
                            .addPutItem(customerTable, putItemEnhancedRequest)
                            .build();

            /*
            TransactWriteItems
            This uses the Enhanced Client and not the Mapped Table Resource
            */
            enhancedClient.transactWriteItems(transactWriteItemsEnhancedRequest);


        }catch (Exception e){
            handleCommonErrors(e);
        }
    }