7

我在亚马逊的 AWS 工具包中遇到了一个基于 Java 的 DynamoDBMapper 的问题,该问题引发了“无法实例化类”异常错误。这是我第一次尝试使用 DBMapper,所以我不完全确定我的所有设置都正确。我的代码可以在下面找到:

public static void main(String[] args) {
    dynamoDB = new AmazonDynamoDBClient(credentials);

    DynamoDBMapper mapper = new DynamoDBMapper(dynamoDB);
    PStatus data = mapper.load(PStatus.class, "online", new Integer(1655));
    String assigned = data.getAssigned();
    System.out.println(assigned);
}

@DynamoDBTable(tableName = "projectStatus")
public class PStatus {

    private Integer projID;
    private String status;
    private String assigned;

    @DynamoDBHashKey(attributeName = "status")
    public String getStatus() { return status; }
    public void setStatus(String status) { this.status = status; }

    @DynamoDBRangeKey(attributeName = "projID")
    public Integer getId() { return projID; }
    public void setId(Integer projID) { this.projID = projID; }

    @DynamoDBAttribute(attributeName = "assigned")
    public String getAssigned() { return assigned; }
    public void setAssigned(String assigned) { this.assigned = assigned; }
}

我基本上只是在尝试执行 GetItemRequest 然后绘制一个特定的属性,但是我得到了指向 line 的错误PStatus data = mapper.load(PStatus.class, "onFarm", new Integer(1655));。我到底做错了什么?

编辑:下面的确切例外:

Exception in thread "main" com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMappingException: Failed to instantiate class
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.createKeyObject(DynamoDBMapper.java:325)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:313)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.load(DynamoDBMapper.java:212)
    at test.TestGet.main(TestGet.java:20)
Caused by: java.lang.InstantiationException: test.TestGet$PStatus
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.createKeyObject(DynamoDBMapper.java:323)
4

4 回答 4

19

添加空构造函数,以便调用 java.lang.Class.newInstance0(Unknown Source) 可以工作:

public PStatus()
{

}
于 2015-04-27T17:03:01.177 回答
3

才想出答案。这不是我想的那样,但最终是我把课程放在了错误的位置。他们展示它的方式,我的印象是它是一个子类,但 PStatus 需要是它自己的类、文件和所有东西。我试图在 TestGet 中对其进行子类化,但它不喜欢那样。我猜这更像是我遇到的 Java 问题,而不是 DBMapper。还在学习!

于 2013-04-29T00:54:34.430 回答
1

我有同样的问题,并通过删除正在初始化的类的所有构造函数来解决它。

于 2013-10-16T08:42:43.407 回答
0

您也可能使用了两个 DynamoDBVersionAttribute。它不会发生在您的用例中,但也可能会出现此错误。

于 2020-02-25T07:01:15.460 回答