/* * Copyright 2010-2019 Amazon.com, Inc. or its affiliates. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"). * You may not use this file except in compliance with the License. * A copy of the License is located at * * http://aws.amazon.com/apache2.0 * * or in the "license" file accompanying this file. This file is distributed * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing * permissions and limitations under the License. */ package com.amazonaws.services.dynamodbv2.model; import java.io.Serializable; import com.amazonaws.AmazonWebServiceRequest; /** *

* The BatchWriteItem operation puts or deletes multiple items in * one or more tables. A single call to BatchWriteItem can write up * to 16 MB of data, which can comprise as many as 25 put or delete requests. * Individual items to be written can be as large as 400 KB. *

* *

* BatchWriteItem cannot update items. To update items, use the * UpdateItem action. *

*
*

* The individual PutItem and DeleteItem operations * specified in BatchWriteItem are atomic; however * BatchWriteItem as a whole is not. If any requested operations * fail because the table's provisioned throughput is exceeded or an internal * processing failure occurs, the failed operations are returned in the * UnprocessedItems response parameter. You can investigate and * optionally resend the requests. Typically, you would call * BatchWriteItem in a loop. Each iteration would check for * unprocessed items and submit a new BatchWriteItem request with * those unprocessed items until all items have been processed. *

*

* Note that if none of the items can be processed due to insufficient * provisioned throughput on all of the tables in the request, then * BatchWriteItem will return a * ProvisionedThroughputExceededException. *

* *

* If DynamoDB returns any unprocessed items, you should retry the batch * operation on those items. However, we strongly recommend that you use an * exponential backoff algorithm. If you retry the batch operation * immediately, the underlying read or write requests can still fail due to * throttling on the individual tables. If you delay the batch operation using * exponential backoff, the individual requests in the batch are much more * likely to succeed. *

*

* For more information, see Batch Operations and Error Handling in the Amazon DynamoDB Developer * Guide. *

*
*

* With BatchWriteItem, you can efficiently write or delete large * amounts of data, such as from Amazon Elastic MapReduce (EMR), or copy data * from another database into DynamoDB. In order to improve performance with * these large-scale operations, BatchWriteItem does not behave in * the same way as individual PutItem and DeleteItem * calls would. For example, you cannot specify conditions on individual put and * delete requests, and BatchWriteItem does not return deleted * items in the response. *

*

* If you use a programming language that supports concurrency, you can use * threads to write items in parallel. Your application must include the * necessary logic to manage the threads. With languages that don't support * threading, you must update or delete the specified items one at a time. In * both situations, BatchWriteItem performs the specified put and * delete operations in parallel, giving you the power of the thread pool * approach without having to introduce complexity into your application. *

*

* Parallel processing reduces latency, but each specified put and delete * request consumes the same number of write capacity units whether it is * processed in parallel or not. Delete operations on nonexistent items consume * one write capacity unit. *

*

* If one or more of the following is true, DynamoDB rejects the entire batch * write operation: *

* */ public class BatchWriteItemRequest extends AmazonWebServiceRequest implements Serializable { /** *

* A map of one or more table names and, for each table, a list of * operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of the * following: *

* */ private java.util.Map> requestItems; /** *

* Determines the level of detail about provisioned throughput consumption * that is returned in the response: *

* *

* Constraints:
* Allowed Values: INDEXES, TOTAL, NONE */ private String returnConsumedCapacity; /** *

* Determines whether item collection metrics are returned. If set to * SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are returned * in the response. If set to NONE (the default), no statistics * are returned. *

*

* Constraints:
* Allowed Values: SIZE, NONE */ private String returnItemCollectionMetrics; /** * Default constructor for BatchWriteItemRequest object. Callers should use * the setter or fluent setter (with...) methods to initialize any * additional object members. */ public BatchWriteItemRequest() { } /** * Constructs a new BatchWriteItemRequest object. Callers should use the * setter or fluent setter (with...) methods to initialize any additional * object members. * * @param requestItems

* A map of one or more table names and, for each table, a list * of operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of * the following: *

* */ public BatchWriteItemRequest(java.util.Map> requestItems) { setRequestItems(requestItems); } /** *

* A map of one or more table names and, for each table, a list of * operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of the * following: *

* * * @return

* A map of one or more table names and, for each table, a list of * operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of the * following: *

* */ public java.util.Map> getRequestItems() { return requestItems; } /** *

* A map of one or more table names and, for each table, a list of * operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of the * following: *

*
    *
  • *

    * DeleteRequest - Perform a DeleteItem operation * on the specified item. The item to be deleted is identified by a * Key subelement: *

    *
      *
    • *

      * Key - A map of primary key attribute values that uniquely * identify the item. Each entry in this map consists of an attribute name * and an attribute value. For each primary key, you must provide all * of the key attributes. For example, with a simple primary key, you only * need to provide a value for the partition key. For a composite primary * key, you must provide values for both the partition key and the * sort key. *

      *
    • *
    *
  • *
  • *

    * PutRequest - Perform a PutItem operation on the * specified item. The item to be put is identified by an Item * subelement: *

    *
      *
    • *

      * Item - A map of attributes and their values. Each entry in * this map consists of an attribute name and an attribute value. Attribute * values must not be null; string and binary type attributes must have * lengths greater than zero; and set type attributes must not be empty. * Requests that contain empty values will be rejected with a * ValidationException exception. *

      *

      * If you specify any attributes that are part of an index key, then the * data types for those attributes must match those of the schema in the * table's attribute definition. *

      *
    • *
    *
  • *
* * @param requestItems

* A map of one or more table names and, for each table, a list * of operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of * the following: *

*
    *
  • *

    * DeleteRequest - Perform a DeleteItem * operation on the specified item. The item to be deleted is * identified by a Key subelement: *

    *
      *
    • *

      * Key - A map of primary key attribute values that * uniquely identify the item. Each entry in this map consists of * an attribute name and an attribute value. For each primary * key, you must provide all of the key attributes. For * example, with a simple primary key, you only need to provide a * value for the partition key. For a composite primary key, you * must provide values for both the partition key and the * sort key. *

      *
    • *
    *
  • *
  • *

    * PutRequest - Perform a PutItem * operation on the specified item. The item to be put is * identified by an Item subelement: *

    *
      *
    • *

      * Item - A map of attributes and their values. Each * entry in this map consists of an attribute name and an * attribute value. Attribute values must not be null; string and * binary type attributes must have lengths greater than zero; * and set type attributes must not be empty. Requests that * contain empty values will be rejected with a * ValidationException exception. *

      *

      * If you specify any attributes that are part of an index key, * then the data types for those attributes must match those of * the schema in the table's attribute definition. *

      *
    • *
    *
  • *
*/ public void setRequestItems(java.util.Map> requestItems) { this.requestItems = requestItems; } /** *

* A map of one or more table names and, for each table, a list of * operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of the * following: *

*
    *
  • *

    * DeleteRequest - Perform a DeleteItem operation * on the specified item. The item to be deleted is identified by a * Key subelement: *

    *
      *
    • *

      * Key - A map of primary key attribute values that uniquely * identify the item. Each entry in this map consists of an attribute name * and an attribute value. For each primary key, you must provide all * of the key attributes. For example, with a simple primary key, you only * need to provide a value for the partition key. For a composite primary * key, you must provide values for both the partition key and the * sort key. *

      *
    • *
    *
  • *
  • *

    * PutRequest - Perform a PutItem operation on the * specified item. The item to be put is identified by an Item * subelement: *

    *
      *
    • *

      * Item - A map of attributes and their values. Each entry in * this map consists of an attribute name and an attribute value. Attribute * values must not be null; string and binary type attributes must have * lengths greater than zero; and set type attributes must not be empty. * Requests that contain empty values will be rejected with a * ValidationException exception. *

      *

      * If you specify any attributes that are part of an index key, then the * data types for those attributes must match those of the schema in the * table's attribute definition. *

      *
    • *
    *
  • *
*

* Returns a reference to this object so that method calls can be chained * together. * * @param requestItems

* A map of one or more table names and, for each table, a list * of operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of * the following: *

*
    *
  • *

    * DeleteRequest - Perform a DeleteItem * operation on the specified item. The item to be deleted is * identified by a Key subelement: *

    *
      *
    • *

      * Key - A map of primary key attribute values that * uniquely identify the item. Each entry in this map consists of * an attribute name and an attribute value. For each primary * key, you must provide all of the key attributes. For * example, with a simple primary key, you only need to provide a * value for the partition key. For a composite primary key, you * must provide values for both the partition key and the * sort key. *

      *
    • *
    *
  • *
  • *

    * PutRequest - Perform a PutItem * operation on the specified item. The item to be put is * identified by an Item subelement: *

    *
      *
    • *

      * Item - A map of attributes and their values. Each * entry in this map consists of an attribute name and an * attribute value. Attribute values must not be null; string and * binary type attributes must have lengths greater than zero; * and set type attributes must not be empty. Requests that * contain empty values will be rejected with a * ValidationException exception. *

      *

      * If you specify any attributes that are part of an index key, * then the data types for those attributes must match those of * the schema in the table's attribute definition. *

      *
    • *
    *
  • *
* @return A reference to this updated object so that method calls can be * chained together. */ public BatchWriteItemRequest withRequestItems( java.util.Map> requestItems) { this.requestItems = requestItems; return this; } /** *

* A map of one or more table names and, for each table, a list of * operations to be performed (DeleteRequest or * PutRequest). Each element in the map consists of the * following: *

*
    *
  • *

    * DeleteRequest - Perform a DeleteItem operation * on the specified item. The item to be deleted is identified by a * Key subelement: *

    *
      *
    • *

      * Key - A map of primary key attribute values that uniquely * identify the item. Each entry in this map consists of an attribute name * and an attribute value. For each primary key, you must provide all * of the key attributes. For example, with a simple primary key, you only * need to provide a value for the partition key. For a composite primary * key, you must provide values for both the partition key and the * sort key. *

      *
    • *
    *
  • *
  • *

    * PutRequest - Perform a PutItem operation on the * specified item. The item to be put is identified by an Item * subelement: *

    *
      *
    • *

      * Item - A map of attributes and their values. Each entry in * this map consists of an attribute name and an attribute value. Attribute * values must not be null; string and binary type attributes must have * lengths greater than zero; and set type attributes must not be empty. * Requests that contain empty values will be rejected with a * ValidationException exception. *

      *

      * If you specify any attributes that are part of an index key, then the * data types for those attributes must match those of the schema in the * table's attribute definition. *

      *
    • *
    *
  • *
*

* The method adds a new key-value pair into RequestItems parameter, and * returns a reference to this object so that method calls can be chained * together. * * @param key The key of the entry to be added into RequestItems. * @param value The corresponding value of the entry to be added into * RequestItems. * @return A reference to this updated object so that method calls can be * chained together. */ public BatchWriteItemRequest addRequestItemsEntry(String key, java.util.List value) { if (null == this.requestItems) { this.requestItems = new java.util.HashMap>(); } if (this.requestItems.containsKey(key)) throw new IllegalArgumentException("Duplicated keys (" + key.toString() + ") are provided."); this.requestItems.put(key, value); return this; } /** * Removes all the entries added into RequestItems. *

* Returns a reference to this object so that method calls can be chained * together. */ public BatchWriteItemRequest clearRequestItemsEntries() { this.requestItems = null; return this; } /** *

* Determines the level of detail about provisioned throughput consumption * that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary index that was * accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. In these * cases, specifying INDEXES will only return * ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details are included * in the response. *

    *
  • *
*

* Constraints:
* Allowed Values: INDEXES, TOTAL, NONE * * @return

* Determines the level of detail about provisioned throughput * consumption that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary index * that was accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. In * these cases, specifying INDEXES will only return * ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details are * included in the response. *

    *
  • *
* @see ReturnConsumedCapacity */ public String getReturnConsumedCapacity() { return returnConsumedCapacity; } /** *

* Determines the level of detail about provisioned throughput consumption * that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary index that was * accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. In these * cases, specifying INDEXES will only return * ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details are included * in the response. *

    *
  • *
*

* Constraints:
* Allowed Values: INDEXES, TOTAL, NONE * * @param returnConsumedCapacity

* Determines the level of detail about provisioned throughput * consumption that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary * index that was accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. * In these cases, specifying INDEXES will only * return ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details * are included in the response. *

    *
  • *
* @see ReturnConsumedCapacity */ public void setReturnConsumedCapacity(String returnConsumedCapacity) { this.returnConsumedCapacity = returnConsumedCapacity; } /** *

* Determines the level of detail about provisioned throughput consumption * that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary index that was * accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. In these * cases, specifying INDEXES will only return * ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details are included * in the response. *

    *
  • *
*

* Returns a reference to this object so that method calls can be chained * together. *

* Constraints:
* Allowed Values: INDEXES, TOTAL, NONE * * @param returnConsumedCapacity

* Determines the level of detail about provisioned throughput * consumption that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary * index that was accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. * In these cases, specifying INDEXES will only * return ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details * are included in the response. *

    *
  • *
* @return A reference to this updated object so that method calls can be * chained together. * @see ReturnConsumedCapacity */ public BatchWriteItemRequest withReturnConsumedCapacity(String returnConsumedCapacity) { this.returnConsumedCapacity = returnConsumedCapacity; return this; } /** *

* Determines the level of detail about provisioned throughput consumption * that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary index that was * accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. In these * cases, specifying INDEXES will only return * ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details are included * in the response. *

    *
  • *
*

* Constraints:
* Allowed Values: INDEXES, TOTAL, NONE * * @param returnConsumedCapacity

* Determines the level of detail about provisioned throughput * consumption that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary * index that was accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. * In these cases, specifying INDEXES will only * return ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details * are included in the response. *

    *
  • *
* @see ReturnConsumedCapacity */ public void setReturnConsumedCapacity(ReturnConsumedCapacity returnConsumedCapacity) { this.returnConsumedCapacity = returnConsumedCapacity.toString(); } /** *

* Determines the level of detail about provisioned throughput consumption * that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary index that was * accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. In these * cases, specifying INDEXES will only return * ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details are included * in the response. *

    *
  • *
*

* Returns a reference to this object so that method calls can be chained * together. *

* Constraints:
* Allowed Values: INDEXES, TOTAL, NONE * * @param returnConsumedCapacity

* Determines the level of detail about provisioned throughput * consumption that is returned in the response: *

*
    *
  • *

    * INDEXES - The response includes the aggregate * ConsumedCapacity for the operation, together with * ConsumedCapacity for each table and secondary * index that was accessed. *

    *

    * Note that some operations, such as GetItem and * BatchGetItem, do not access any indexes at all. * In these cases, specifying INDEXES will only * return ConsumedCapacity information for table(s). *

    *
  • *
  • *

    * TOTAL - The response includes only the aggregate * ConsumedCapacity for the operation. *

    *
  • *
  • *

    * NONE - No ConsumedCapacity details * are included in the response. *

    *
  • *
* @return A reference to this updated object so that method calls can be * chained together. * @see ReturnConsumedCapacity */ public BatchWriteItemRequest withReturnConsumedCapacity( ReturnConsumedCapacity returnConsumedCapacity) { this.returnConsumedCapacity = returnConsumedCapacity.toString(); return this; } /** *

* Determines whether item collection metrics are returned. If set to * SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are returned * in the response. If set to NONE (the default), no statistics * are returned. *

*

* Constraints:
* Allowed Values: SIZE, NONE * * @return

* Determines whether item collection metrics are returned. If set * to SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are * returned in the response. If set to NONE (the * default), no statistics are returned. *

* @see ReturnItemCollectionMetrics */ public String getReturnItemCollectionMetrics() { return returnItemCollectionMetrics; } /** *

* Determines whether item collection metrics are returned. If set to * SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are returned * in the response. If set to NONE (the default), no statistics * are returned. *

*

* Constraints:
* Allowed Values: SIZE, NONE * * @param returnItemCollectionMetrics

* Determines whether item collection metrics are returned. If * set to SIZE, the response includes statistics * about item collections, if any, that were modified during the * operation are returned in the response. If set to * NONE (the default), no statistics are returned. *

* @see ReturnItemCollectionMetrics */ public void setReturnItemCollectionMetrics(String returnItemCollectionMetrics) { this.returnItemCollectionMetrics = returnItemCollectionMetrics; } /** *

* Determines whether item collection metrics are returned. If set to * SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are returned * in the response. If set to NONE (the default), no statistics * are returned. *

*

* Returns a reference to this object so that method calls can be chained * together. *

* Constraints:
* Allowed Values: SIZE, NONE * * @param returnItemCollectionMetrics

* Determines whether item collection metrics are returned. If * set to SIZE, the response includes statistics * about item collections, if any, that were modified during the * operation are returned in the response. If set to * NONE (the default), no statistics are returned. *

* @return A reference to this updated object so that method calls can be * chained together. * @see ReturnItemCollectionMetrics */ public BatchWriteItemRequest withReturnItemCollectionMetrics(String returnItemCollectionMetrics) { this.returnItemCollectionMetrics = returnItemCollectionMetrics; return this; } /** *

* Determines whether item collection metrics are returned. If set to * SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are returned * in the response. If set to NONE (the default), no statistics * are returned. *

*

* Constraints:
* Allowed Values: SIZE, NONE * * @param returnItemCollectionMetrics

* Determines whether item collection metrics are returned. If * set to SIZE, the response includes statistics * about item collections, if any, that were modified during the * operation are returned in the response. If set to * NONE (the default), no statistics are returned. *

* @see ReturnItemCollectionMetrics */ public void setReturnItemCollectionMetrics( ReturnItemCollectionMetrics returnItemCollectionMetrics) { this.returnItemCollectionMetrics = returnItemCollectionMetrics.toString(); } /** *

* Determines whether item collection metrics are returned. If set to * SIZE, the response includes statistics about item * collections, if any, that were modified during the operation are returned * in the response. If set to NONE (the default), no statistics * are returned. *

*

* Returns a reference to this object so that method calls can be chained * together. *

* Constraints:
* Allowed Values: SIZE, NONE * * @param returnItemCollectionMetrics

* Determines whether item collection metrics are returned. If * set to SIZE, the response includes statistics * about item collections, if any, that were modified during the * operation are returned in the response. If set to * NONE (the default), no statistics are returned. *

* @return A reference to this updated object so that method calls can be * chained together. * @see ReturnItemCollectionMetrics */ public BatchWriteItemRequest withReturnItemCollectionMetrics( ReturnItemCollectionMetrics returnItemCollectionMetrics) { this.returnItemCollectionMetrics = returnItemCollectionMetrics.toString(); return this; } /** * Returns a string representation of this object; useful for testing and * debugging. * * @return A string representation of this object. * @see java.lang.Object#toString() */ @Override public String toString() { StringBuilder sb = new StringBuilder(); sb.append("{"); if (getRequestItems() != null) sb.append("RequestItems: " + getRequestItems() + ","); if (getReturnConsumedCapacity() != null) sb.append("ReturnConsumedCapacity: " + getReturnConsumedCapacity() + ","); if (getReturnItemCollectionMetrics() != null) sb.append("ReturnItemCollectionMetrics: " + getReturnItemCollectionMetrics()); sb.append("}"); return sb.toString(); } @Override public int hashCode() { final int prime = 31; int hashCode = 1; hashCode = prime * hashCode + ((getRequestItems() == null) ? 0 : getRequestItems().hashCode()); hashCode = prime * hashCode + ((getReturnConsumedCapacity() == null) ? 0 : getReturnConsumedCapacity() .hashCode()); hashCode = prime * hashCode + ((getReturnItemCollectionMetrics() == null) ? 0 : getReturnItemCollectionMetrics().hashCode()); return hashCode; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (obj instanceof BatchWriteItemRequest == false) return false; BatchWriteItemRequest other = (BatchWriteItemRequest) obj; if (other.getRequestItems() == null ^ this.getRequestItems() == null) return false; if (other.getRequestItems() != null && other.getRequestItems().equals(this.getRequestItems()) == false) return false; if (other.getReturnConsumedCapacity() == null ^ this.getReturnConsumedCapacity() == null) return false; if (other.getReturnConsumedCapacity() != null && other.getReturnConsumedCapacity().equals(this.getReturnConsumedCapacity()) == false) return false; if (other.getReturnItemCollectionMetrics() == null ^ this.getReturnItemCollectionMetrics() == null) return false; if (other.getReturnItemCollectionMetrics() != null && other.getReturnItemCollectionMetrics().equals( this.getReturnItemCollectionMetrics()) == false) return false; return true; } }