2015-06-21 64 views
2

我知道這聽起來像一個簡單的問題,但出於某種原因,我無法在線或通過StackOverflow找到明確的答案。如何使用Java刪除DynamoDB中的項目?

我有一個名爲「ABC」的表的DynamoDB。主鍵是「ID」作爲字符串,其他屬性之一是「名稱」作爲字符串。如何使用Java從此表中刪除項目?

AmazonDynamoDBClient dynamoDB; 
    . 
    . 
    . 
    DeleteItemRequest dir = new DeleteItemRequest(); 
    dir.withConditionExpression("ID = 214141").withTableName("ABC"); 
    DeleteItemResult deleteResult = dynamoDB.deleteItem(dir); 

我有一個驗證異常:

Exception in thread "main" com.amazonaws.AmazonServiceException: 1 validation error detected: Value null at 'key' failed to satisfy constraint: Member must not be null (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: RQ70OIGOQAJ9MRGSUA0UIJLRUNVV4KQNSO5AEMVJF66Q9ASUAAJG) 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1160) 
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:748) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:467) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:302) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:3240) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.deleteItem(AmazonDynamoDBClient.java:972) 
    at DynamoDBUploader.deleteItems(DynamoDBUploader.java:168) 
    at Main.main(Main.java:56) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140) 

如果我需要知道,爲了在DynamoDB表刪除的項目散列鍵,我想我可能需要重新設計我的數據庫,以便有效地刪除項目。

我的表看起來像這樣: 如果是這樣的話,啊......我想我需要重新設計我的數據庫表。

ID | Name | Date | Value 
----------------------------------- 
1 | TransactionA | 2015-06-21 | 30 
2 | TransactionB | 2015-06-21 | 40 
3 | TransactionC | 2015-06-21 | 50 

基本上,我想輕鬆刪除日期「2015-06-21」的所有交易。我怎樣才能簡單而快速地完成此操作,而無需處理哈希密鑰ID?

回答

3

AWS DynamoDB知道您的表的哈希鍵列。 您只需指定要刪除的值。 DeleteItemRequest具有流暢的API:

Key keyToDelete = new Key().withHashKeyElement(new AttributeValue("214141")); 
DeleteItemRequest dir = new DeleteItemRequest() 
    .withTableName("ABC") 
    .withKey(keyToDelete); 
+0

謝謝@sharonbn。 – codeshark

+0

問題:我們是否需要知道哈希鍵以刪除DynamoDB表中的項目? – codeshark

+0

嗨,沙龍,我更新了我最初的帖子。你能指導我做最後一部分嗎?基本上,我想輕鬆刪除日期「2015-06-21」的所有交易。我怎樣才能簡單而快速地完成此操作,而無需處理哈希密鑰ID? – codeshark