sunmingtao / sample-code

3 stars 4 forks source link

Error on DynamoDBRepo.deleteAll(): DynamoDBMappingException: could not invoke null on class #257

Closed sunmingtao closed 3 years ago

sunmingtao commented 3 years ago

Fails to start Spring boot server, error on DynamoDBRepo.deleteAll()

Caused by: com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: could not invoke null on class com.smt.soccerbetrestapi.entity.Match with value 2020/12/22-Real Sociedad-Atlético Madrid of type class java.lang.String
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$MethodReflect.set(StandardBeanProperties.java:136) ~[aws-java-sdk-dynamodb-1.11.443.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.set(DynamoDBMapperFieldModel.java:111) ~[aws-java-sdk-dynamodb-1.11.443.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperFieldModel.unconvertAndSet(DynamoDBMapperFieldModel.java:164) ~[aws-java-sdk-dynamodb-1.11.443.jar:na]
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapperTableModel.unconvert(DynamoDBMapperTableModel.java:267) ~[aws-java-sdk-dynamodb-1.11.443.jar:na]
    ... 53 common frames omitted
Caused by: java.lang.NullPointerException: null
    at com.amazonaws.services.dynamodbv2.datamodeling.StandardBeanProperties$MethodReflect.set(StandardBeanProperties.java:133) ~[aws-java-sdk-dynamodb-1.11.443.jar:na]
    ... 56 common frames omitted
sunmingtao commented 3 years ago

The primary key is on getId(), there is no corresponding setId() because Id is a derived value. However, Dynamo DB requires a setId method. The easiest solution is to provide an empty setId() method.

    @DynamoDBHashKey
    public String getId() {
        return SeasonUtils.toFullDateString(matchDate) + "-" + homeTeam + "-" + awayTeam;
    }
public void setId(String id) {
    //Empty setter required by dynamodb
}