如果散列键重复或符合您的条件,有几篇关于如何抛出约束验证异常(例如: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);
答案 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)