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);
}
}