2016-04-03 3 views
0

Nicht sicher, was das Problem hier ist.Dies ist meine Datenbank auf Amazon DynamoDb. Ich bekomme immer wieder das Problem, dass das angegebene Schlüsselelement nicht mit dem Schema übereinstimmt. Ich habe debuggind gemacht und bin sicher, dass alle Werte gesetzt sind, aber ich bin mir nicht sicher, warum dieses Problem auftaucht. Fehle ich etwas?das angegebene Schlüsselelement stimmt nicht mit dem Schema überein - Java

enter image description here

Dies ist der Code-Snippet, wo ich versuche, die tatsächlich in den db ein Konflikt zwischen Ihrem Datenmodell Dies ist am

final Job job = new Job(); 
job.setDescription(txtDescription.getText().toString()); 
job.setType("Job entry"); 
job.setPrice(500); 
job.setDate((new Date()).getTime()); 
job.setId("1"); 
job.setPosterID("poster"); 
Thread thread = new Thread(new Runnable(){ 
    @Override 
    public void run() { 
     try { 
      DynamoDBMapper mapper = new DynamoDBMapper(ActivityMain.getAWSClient(getActivity())); 
      mapper.save(job); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}); 
thread.start(); 
+0

Sie haben bessere Chancen, Hilfe zu erhalten, wenn Sie Code als formatierten Text anstelle von Bildern eingeben – andrepnh

Antwort

1

wahrscheinlich hinzuzufügen und die aktuellen Tabelle in DynamoDB. Stellen Sie sicher, dass der in der Klasse 'Job' definierte Schlüssel (Partitionsschlüssel und optional Sortierschlüssel) mit dem genauen Namen und Typ der Tabelle in DynamoDB übereinstimmt (in Ihrer Klasse durch das Attribut @DynamoDBTable definiert). Zum Beispiel hatte, wenn Sie die save Operation unter Verwendung des Datenmodells unten, und die Tabelle ausgeführt ProductCatalog eine Partition Schlüssel Id vom Typ string, DynamoDB die gleiche Ausnahme erzeugen würde, wie das Datenmodell den Schlüssel als Integer definiert:

@DynamoDBTable(tableName="ProductCatalog") 
public static class CatalogItem { 
    private Integer id; 
    private String title; 

    //Partition key 
    @DynamoDBHashKey(attributeName="Id") 
    public Integer getId() { return id; } 
    public void setId(Integer id) { this.id = id; } 

    @DynamoDBAttribute(attributeName="Title") 
    public String getTitle() { return title; }  
    public void setTitle(String title) { this.title = title; } 

} 
2

Achten Sie auf @DynamoDBHashKey und @DynamoDBAttribute in der Objektklasse. Verwechseln Sie nicht zwischen ihnen. Die erste ist für den Schlüssel des Schemas, und die zweite ist für die regulären Attribute. Selbst wenn Sie versuchen, nur den Schlüssel zu setzen und die anderen Attribute nicht zu verwenden, und dann versuchen, ihn auf dynamodb hochzuladen, erhalten Sie eine Ausnahme. natürlich ist es relevant für die anderen "@" - Tags, die Sie an die Attribute anhängen können.