写入Dynamo表工作正常,但读取抛出DynamoDBMappingException

时间:2017-02-01 21:34:21

标签: spring amazon-dynamodb

执行orderRequestDao.save(new OrderRequest("5000", "body"));成功地在Dynamo中放置记录。任何读取返回的尝试:

[Request processing failed; nested exception is com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: could not invoke null on class com.cfa.fulfillmentApi.model.OrderRequest with value 100 of type class java.lang.String] with root cause

(记录身份:100存在)

我正在使用以下jar(aws.sdk.version:1.11.86):

    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-core</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.amazonaws</groupId>
        <artifactId>aws-java-sdk-dynamodb</artifactId>
        <version>${aws.sdk.version}</version>
    </dependency>
    <dependency>
        <groupId>com.github.derjust</groupId>
        <artifactId>spring-data-dynamodb</artifactId>
        <version>4.4.1</version>
    </dependency>

DyamoDb config:

主分区键:id (String)

道:

@EnableScan
public interface OrderRequestDao extends CrudRepository<OrderRequest, String> {
    OrderRequest findOne(String s);
    OrderRequest save(OrderRequest or);
}

域对象:

@DynamoDBTable(tableName = "dev_transx")
public class OrderRequest {

    private String id;
    private String body;

    public OrderRequest(String id, String body) {
        this.id = id;
        this.body = body;
    }

    public OrderRequest() {}

    @DynamoDBHashKey
    public String getId()
    {
        return id;
    }

    @DynamoDBAttribute
    public String getBody()
    {
        return body;
    }

    public void setBody(String body) {
        this.body = body;
    }

    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, body='%s']",
                id, body);
    }

    @Override
    public int hashCode() {
        return id.hashCode();
    }

}

我在域类中尝试了id的每种数据类型,但没有运气。

2 个答案:

答案 0 :(得分:3)

我已移除aws-java-sdk-dynamodb,因为它已在spring-data-dynamodb

最重要的是,我在域类中添加了ID的setter。

答案 1 :(得分:2)

为该字段添加setter方法就像一个超级魅力