2016-04-05 20 views
2

DynamoDBMapper kullanarak bir DynamoDB örneğine yeni bir madde (WCode) tasarruf ederken bu hatayı var:ValidationException ederken Haritacıyla DynamoDB tasarruf

Exception in thread "Thread-1" com.amazonaws.AmazonServiceException: The provided key element does not match the schema (Service: AmazonDynamoDBv2; Status Code: 400; Error Code: ValidationException; Request ID: 4OOMKU7NS1VD19EN988SUUM3U7VV4KQNSO5AEMVJF66Q9ASUAAJG) 
    at com.amazonaws.http.AmazonHttpClient.handleErrorResponse(AmazonHttpClient.java:1369) 
    at com.amazonaws.http.AmazonHttpClient.executeOneRequest(AmazonHttpClient.java:913) 
    at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:631) 
    at com.amazonaws.http.AmazonHttpClient.doExecute(AmazonHttpClient.java:400) 
    at com.amazonaws.http.AmazonHttpClient.executeWithTimer(AmazonHttpClient.java:362) 
    at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:311) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.invoke(AmazonDynamoDBClient.java:1966) 
    at com.amazonaws.services.dynamodbv2.AmazonDynamoDBClient.updateItem(AmazonDynamoDBClient.java:1780) 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.doUpdateItem(DynamoDBMapper.java:1110) 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$2.executeLowLevelRequest(DynamoDBMapper.java:806) 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper$SaveObjectHandler.execute(DynamoDBMapper.java:989) 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:835) 
    at com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper.save(DynamoDBMapper.java:669) 
    at com.wkt.cdmng.MessageAnalyzer.storeCode(MessageAnalyzer.java:220) 
    at com.wkt.cdmng.MessageAnalyzer.run(MessageAnalyzer.java:156) 
    at java.lang.Thread.run(Thread.java:745) 

ben misafir o WCode sınıfına temel özelliklerle ilgili bir şey ama hangisinin ve ek ayrıntılar sorununu nasıl arayacağımı gerçekten anlayamıyorum. Ben

private void storeCode(String code) { 
    DynamoDBMapper mapper = awsDynamo.getMapper(); // singleton class I use to connect to DynamoDB 
    WCode tmpCode = new WCode(); 
    tmpCode.setId(code); 
    tmpCode.setCode(code); 
    tmpCode.setExtra(""); 
    mapper.save(tmpCode); 
} 

:

import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBAttribute; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBHashKey; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBIndexHashKey; 
import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; 
import java.util.Date; 

@DynamoDBTable(tableName = "CODES_DEV") 
public class WCode { 
    private String id; 
    private String code; 
    private String extra; 

    @DynamoDBHashKey(attributeName = "ID") 
    public String getId() {return id;} 
    public void setId(String code) {id = "0|" + code + "|" + String.valueOf(new Date().getTime());} 

    @DynamoDBIndexHashKey(globalSecondaryIndexName = "CD-index", attributeName = "CD") 
    public String getCode() {return code;} 
    public void setCode(String code) {this.code = code;} 

    @DynamoDBAttribute(attributeName = "EX") 
    public String getExtra() {return extra;} 
    public void setExtra(String extra) {this.extra = extra;} 
} 

Bu benim öğeyi (storeCode) depolamak için kullanın yöntemdir:

aşağıdaki WCode model sınıf ve tüm nitelikleri adlarının doğru bildirilmektedir olduğunu aws-java-sdk-dynamodb ve aws-java-sdk-sqs (projenin başka bir kısmı için ikinci) sürüm 1.10.58 kullanarak m.

Birisi beni olası bir çözüm veya öneriye yönlendirebilir mi?

Çok teşekkür ederim!

+0

Eğer çenesinde sizin dynamodb içinde keynamens ile WCode sınıfının keynames benim için iş karşılaştırıldı mı oluyor

mapper.batchSave(Arrays.asList(tmpCode)); 

kaydetmek kullanarak çözdüğünüz ? Hatırladığım kadarıyla büyük/küçük harfe duyarlı –

+0

Haklısınız; Ben yaptım, düzeltilmiş görünüyorlar. – Marco

+0

Şimdi çalışıyor mu? –

cevap

1

Aynı problem vardı. Ben batchSave işlevini yerine O