在DynamoDB Range键中插入项目

时间:2015-01-27 17:11:30

标签: java amazon-web-services amazon-dynamodb

我创建了一个DynamoDB表,其中包含以下详细信息:

enter image description here

我试图在表格中插入项目:

public static void insertItems() {
    AmazonDynamoDBClient ddb = UserPreferenceDemoActivity.clientManager
            .ddb();
    DynamoDBMapper mapper = new DynamoDBMapper(ddb);

    try {
        UserPreference userPreference = new UserPreference();
        userPreference.setNavn("SalonSol");
        for (int i = 800; i <= 1600; i = i + 50) {

            userPreference.setTid(i);                
            userPreference.setMandag("Ledig");
            userPreference.setTirsdag("Ledig");
            userPreference.setOnsdag("Ledig");
            userPreference.setTorsdag("Ledig");
            userPreference.setFredag("Ledig");
            userPreference.setLørdag("Ledig");
            userPreference.setSøndag("Ledig"); 

            Log.d(TAG, "Inserting Tid and Dage");
            mapper.save(userPreference);
            Log.d(TAG, "Tid and Dage inserted");               
        }            
    } catch (AmazonServiceException ex) {
        Log.e(TAG, "Error inserting users");
        UserPreferenceDemoActivity.clientManager
                .wipeCredentialsOnAuthError(ex);
    }
}

但AWS会在异常后继续返回:

AmazonserviceException: The provided key element does not match the schema
Status Code: 400

我实际上是将String值作为Hash Key插入,int值作为范围插入,所以我真的不明白为什么我会得到这个例外。

我对UserPreference类的定义:

@DynamoDBTable(tableName = Constants.TEST_TABLE_NAME)
public static class UserPreference {
    private String Navn;
    private int Tid;
    private String Mandag;
    private String Tirsdag;
    private String Onsdag;
    private String Torsdag;
    private String Fredag;
    private String Lørdag;
    private String Søndag;        



    @DynamoDBHashKey(attributeName = "Navn")
    public String getNavn() {
        return Navn;
    }

    public void setNavn(String Navn) {
        this.Navn = Navn;
    }

    @DynamoDBRangeKey(attributeName = "Tid")
    public int getTid() {
        return Tid;
    }

    public void setTid(int Tid) {
        this.Tid = Tid;
    }

    @DynamoDBAttribute(attributeName = "Mandag")
    public String getMandag() {
        return Mandag;
    }

    public void setMandag(String Mandag) {
        this.Mandag = Mandag;
    }

    @DynamoDBAttribute(attributeName = "Tirsdag")
    public String getTirsdag() {
        return Tirsdag;
    }

    public void setTirsdag(String Tirsdag) {
        this.Tirsdag = Tirsdag;
    }

    @DynamoDBAttribute(attributeName = "Onsdag")
    public String getOnsdag() {
        return Onsdag;
    }

    public void setOnsdag(String Onsdag) {
        this.Onsdag = Onsdag;
    }

    @DynamoDBAttribute(attributeName = "Torsdag")
    public String getTorsdag() {
        return Torsdag;
    }

    public void setTorsdag(String Torsdag) {
        this.Torsdag = Torsdag;
    }

    @DynamoDBAttribute(attributeName = "Fredag")
    public String getFredag() {
        return Fredag;
    }

    public void setFredag(String Fredag) {
        this.Fredag = Fredag;
    }

    @DynamoDBAttribute(attributeName = "Lørdag")
    public String getLørdag() {
        return Lørdag;
    }

    public void setLørdag(String Lørdag) {
        this.Lørdag = Lørdag;
    }

    @DynamoDBAttribute(attributeName = "Søndag")
    public String getSøndag() {
        return Søndag;
    }

    public void setSøndag(String Søndag) {
        this.Søndag = Søndag;
    }   

}

并且表名在&#34;常量&#34;中有以下定义:类:

public static final String TEST_TABLE_NAME = "EkstraTable";

2 个答案:

答案 0 :(得分:0)

我尝试通过复制和粘贴代码来重现问题,然后将其更改为写入我自己的测试表。问题没有发生,我按照您的代码成功地将所有项目放入表中:

http://i.imgur.com/lIPgn7P.png

我建议检查以确保您拥有最新版本的AWS Java SDK,并且表格是正确创建的(我通过控制台创建了我的安全,如果代码仍然不起作用,您可以尝试升级后。)

答案 1 :(得分:0)

我发现了这个问题。我导入了一个很大的错误:

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey

而不是:

com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBRangeKey

用于@DynamoDBRangeKey注释,因为我使用的是Android移动SDK。我通过下载并添加DynamoDBMapper.jar 2.1.8找到了这个问题,这个版本显示了

com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBRangeKey

已弃用。