Dynamodb - 检查范围键上的重复项

时间:2016-07-01 21:43:10

标签: amazon-dynamodb

如果散列键重复或符合您的条件,有几篇关于如何抛出约束验证异常(例如:DynamoDBMapper save only if object doesn't exist)的文章,想知道是否同样适用于范围键。

我在本地进行了测试,并没有抛出错误。

我的保存表达式逻辑如下

            DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
        Map<String, ExpectedAttributeValue> expectedAttributes =
                ImmutableMap.<String, ExpectedAttributeValue>builder()
                        .put("range-key-column",
                             new ExpectedAttributeValue().withExists(false))
                        .build();
        saveExpression.setExpected(expectedAttributes);

1 个答案:

答案 0 :(得分:0)

它确实为我抛出异常。在调用save时,您是否已将saveExpression添加为第二个参数,如下所示。

dynamoDBMapper.save(trail, saveExpression);

1)请注意,在保存数据时应设置散列和范围键。如果未提供散列键或范围键,则会出现异常。

Facebook_id - 哈希键 纬度 - 范围键

        DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient);

    Trail trail = new Trail();
    trail.setFacebook_id(hashKey);
    trail.setLatitude(rangeKey);
    trail.setLongitude("longupdate121");

    DynamoDBSaveExpression saveExpression = new DynamoDBSaveExpression();
    Map<String, ExpectedAttributeValue> expected = new HashMap<>();
    expected.put("latitude", 
            new ExpectedAttributeValue().withExists(false));

    saveExpression.setExpected(expected);

    dynamoDBMapper.save(trail, saveExpression);
  

com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException:   条件请求失败(服务:AmazonDynamoDBv2;状态   代码:400;错误代码:ConditionalCheckFailedException;请求ID:   8e6d5842-d4b7-479b-8eb7-0a746e5fac48)