DynamoDB NoSQL并且无法实例化新的类实例

时间:2016-02-14 20:37:26

标签: java android amazon mapper nosql

需要一些关于AmazonDynamoDB(NoSQL)的帮助,但我认为它与AmazonDynamoDB无关的一般错误。

下面是一个使用DB,talbe name = table并且有2列PhraseID(整数,键列)和短语(字符串)的类。

 @DynamoDBTable(tableName = "table")
   public class Phrase {
    private Integer PhraseID;
    private String phrase;

    @DynamoDBHashKey(attributeName = "phraseID")
    public Integer getID()
    { return PhraseID;  }

    public void setID(Integer PhraseID) {
        this.PhraseID = PhraseID;}

    @DynamoDBAttribute(attributeName = "phrase")
    public String getPhrase()
    { return phrase;     }

    public void setPhrase(String phrase)
    {  this.phrase = phrase;     }

}

使用mapper.save(短语)通过phrase.setID等编写/更新此表没有问题,但是没有读取/加载。我称之为readDB:new readDB()。execute("");

private class readDB extends AsyncTask<String, Void, String> {
    @Override
    protected String doInBackground(String... params)
    {

        AmazonDynamoDBClient ddbClient = new          AmazonDynamoDBClient(credentialsProvider); //sdk-ddb
        DynamoDBMapper mapper = new DynamoDBMapper(ddbClient);
        Phrase phrase = new Phrase();
        int a=1;
        mapper.load(Phrase.class, a);  //want to load a phrase from db with phraseID=1
        return "Executed";
    }
}

所以我得到错误:&#34; com.amazonaws.services.dynamodb.datamodeling.DynamoDBMappingException:无法实例化新的类实例&#34;还有一个&#34;主要活动短语没有零参数构造函数&#34;

谷歌搜索这个错误给了我一个答案,我需要创建一个默认构造函数来解决这个异常&#34;但我真的不明白我需要做什么/改变我的代码。 谢谢!!

3 个答案:

答案 0 :(得分:1)

看起来这个异常来自这里: https://github.com/Widen/aws-sdk-for-java/blob/master/src/main/java/com/amazonaws/services/dynamodb/datamodeling/DynamoDBMapper.java(第291行)

这意味着该类没有默认构造函数,您是否可以将非默认构造函数定义为短语?尝试添加

public Phrase(){}

希望它有所帮助。

答案 1 :(得分:1)

我遇到了同样的问题。 当尝试访问表以进行编组时,DynamoDBMapper会创建该类的新实例。 尝试为你的班级写一个构造函数。 为我工作

答案 2 :(得分:-1)

每个表类必须是操作每个表类的父类的子类。