我能用DynamoDB Mapper在不预先加载项目的情况下删除项目吗?

16

我正在使用DynamoDB mapper删除一个项目,但必须确保在删除之前它存在吗?

所以我目前的做法是

public void delete(final String hashKey, final Long rangeKey) {
    final Object obj = mapper.load(Object.class, hashKey, rangeKey);
    if (obj != null) {
        mapper.delete(obj);
    } 
} 

有没有一种方法可以在不加载项目的情况下删除它?如果未找到该项目,我希望它能悄悄地返回。

3个回答

23

可以的!

只需创建一个具有您想要删除的ID的对象,并将其作为对象传递给delete方法:

...
MyObject object = new MyObject();
object.setHashKey(hashKey);
object.setRangeKey(rangeKey);
mapper.delete(object);
....

如果在DDB表中记录不存在会发生什么? - Manthan Jamdagni
1
文档中写道:“什么也不会发生”:https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/dynamodbv2/datamodeling/IDynamoDBMapper.html#delete-java.lang.Object- - Federico José Sorenson
11
为什么不提供按哈希键直接删除的方法?强制客户端实例化一个全新对象似乎是不必要的。 - Kenny Worden
这里的MyObject是什么? - Selvaram G
这只不过是一个带有一些dynamoDB注释的POJO。 - Federico José Sorenson

3
您也可以使用com.amazonaws.services.dynamodbv2.document.Table实例来完成此操作:
table.deleteItem("hashKeyAttributeName", hashKey, "rangeKeyAttribureName", rangeKey);

要创建一个Table实例,您可以使用以下内容:

BasicAWSCredentials credentials = new BasicAWSCredentials(amazonAWSAccessKey, amazonAWSSecretKey); // set access and secret keys
AmazonDynamoDB amazonDynamoDB = AmazonDynamoDBClientBuilder.standard()
        .withCredentials(new AWSStaticCredentialsProvider(credentials))
        .withRegion("us-west-1") // set aws region
        .build();
Table table = new DynamoDB(amazonDynamoDB).getTable(tableName);

2
OP的问题是关于Dynamodb Mapper而不是Midlevel API。 - Ajak6
@Ajak6,答案有什么问题吗?我只是添加了一种使用AWS SDK的方法,你可以自行决定是否要使用DynamoDB映射器。 - Vasyl Sarzhynskyi
但这不是问题,你的回答没有问题。你也可以使用aws cli来完成这个操作,但问题不在于你可以用多少种方式删除一个项目。 - Ajak6

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接