【发布时间】:2017-04-16 15:29:00
【问题描述】:
我正在尝试根据要更新的分数大于当前分数的条件对表中的字段分数进行条件更新。
我写了以下代码,
StudentDO temp = mapper.load(StudentDO.class, student.getId());
temp.setScore(marks);
ArrayList<AttributeValue> list = new ArrayList<AttributeValue>();
list.add(new AttributeValue().withN(Oldmarks.toString()));
Map<String,ExpectedAttributeValue> expectedAttributes = new
HashMap<String,ExpectedAttributeValue>();
ExpectedAttributeValue expectedAttributeValue = new
ExpectedAttributeValue().withAttributeValueList(list)
.withComparisonOperator("GT");
expectedAttributes.put("Score",expectedAttributeValue);
mapper.save(temp, new DynamoDBSaveExpression().withExpected(expectedAttributes));
运行时异常导致失败
com.amazonaws.services.dynamodbv2.model.ConditionalCheckFailedException:条件请求失败(服务:null;状态代码:400;错误代码:ConditionalCheckFailedException;请求 ID:null)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.handleDynamoDBLocalServiceException(DDBExceptionMappingInvocationHandler.java:87)
at com.amazonaws.services.dynamodbv2.local.embedded.DDBExceptionMappingInvocationHandler.invoke(DDBExceptionMappingInvocationHandler.java:66)
at com.sun.proxy.$Proxy19.updateItem(Unknown Source)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.doUpdateItem(DynamoDBMapper.java:854)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$2.executeLowLevelRequest(DynamoDBMapper.java:594)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:733)
at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:623)
at com.amazonaws.services.dynamodbv2.datamodeling.AbstractDynamoDBMapper.save(AbstractDynamoDBMapper.java:128)
我无法调试为什么会抛出条件检查失败异常。 我可以确定请求格式不正确,但不确定它在哪里格式错误?
我的数据库架构是这样的
@DynamoDBTable(tableName = "Student")
public class StudentDO {
@DynamoDBHashKey(attributeName = "Id")
private Integer id;
@DynamoDBAttribute(attributeName = "Name")
private String name;
@DynamoDBAttribute(attributeName = "Score")
private Integer score;
@Override
public String toString() {
return "Student [Name=" + name + ", id=" + id + ", score=" + score + "]";
}
}
【问题讨论】:
-
您能否提供一些有关您的 Dynamo 架构的详细信息?
-
更新了相关架构
标签: java amazon-dynamodb