2017-04-20 1 views
1

J'ai le code suivant: -java.lang.IllegalArgumentException dans DynamoDB

Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>(); 
    eav.put(":val1", new AttributeValue().withS("12")); 

    ScrapCategoryDO myObject = new ScrapCategoryDO(); 
    myObject.setCategoryName("Iron"); 
    DynamoDBQueryExpression<ScrapCategoryDO> queryExpression = new DynamoDBQueryExpression<ScrapCategoryDO>() 
      //.withHashKeyValues(myObject) 
      .withFilterExpression("UnitPrice < :val1") 
      .withExpressionAttributeValues(eav); 

    List<ScrapCategoryDO> latestReplies = mapper.query(ScrapCategoryDO.class, queryExpression); 
    Log.d(TAG, "Number of categories = "+latestReplies.size()); 
    for (ScrapCategoryDO reply : latestReplies) { 
     Log.d(TAG,"category name = "+reply.getCategoryName()+", unit price = "+ reply.getUnitPrice()); 
    } 

Et j'obtiens l'erreur suivante avec .withHashKeyValues ​​(myObject) comme commenté. Je veux savoir comment puis-je interroger la table entière sans critère/condition de filtre ou quoi? J'ai essayé: -

 DynamoDBQueryExpression<ScrapCategoryDO> queryExpression = new DynamoDBQueryExpression<ScrapCategoryDO>(); 

Mais toujours je recevais la même erreur.

W/System.err: java.lang.IllegalArgumentException: expression de requête illégale: Non hachage condition clé se trouve dans la requête
W/System.err: à com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper. processKeyConditions (DynamoDBMapper.java:2424)
W/System.err: à com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.createQueryRequestFromExpression (DynamoDBMapper.java:2386)
W/System.err: à com.amazonaws. mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query (DynamoDBMapper.java:2169)
W/System.err: à l'adresse com.amazonaws.mobileconnectors.dynamodbv2.dynamodbmapper.DynamoDBMapper.query (Dyna moDBMapper.java:2130)
W/System.err: à com.example.rohitsingla.scrapman.MyActivity.FindAllScrapCategories (MyActivity.java:207)
W/System.err: à com.example.rohitsingla.scrapman. MyActivity.access 000 $ (MyActivity.java:26)
W/System.err: à com.example.rohitsingla.scrapman.MyActivity 3.run $ (MyActivity.java:164)

Répondre

1

S'il vous plaît utiliser API scan pour obtenir tous les enregistrements de la table DynamoDB. Voici l exemple de code.

L'API de requête ne peut pas être utilisée sans les attributs de clé.

Exemple de code: -

ScanResultPage<yourModelClass> yourModelClassResultPage = null; 
do { 
    DynamoDBMapper dynamoDBMapper = new DynamoDBMapper(dynamoDBClient); 
    DynamoDBScanExpression scanExpression = new DynamoDBScanExpression(); 
    if (yourModelClassResultPage != null) { 
     scanExpression.setExclusiveStartKey(yourModelClassResultPage.getLastEvaluatedKey()); 
    } 
    yourModelClassResultPage = dynamoDBMapper.scanPage(yourModelClass.class, scanExpression); 

} while (yourModelClassResultPage.getLastEvaluatedKey() != null); 

Scan API documentation

+0

merci pour la réponse. Ça marche. Mais je veux définir mon champ "CategoryName" comme une clé. Je ne suis pas en mesure de mettre à jour ma table en allant à la console. besoin d'aide pour ça. –

+0

Si vous avez défini CategoryName comme clé, il ne peut pas être mis à jour une fois inséré. J'apprécierais que vous puissiez accepter la réponse et ouvrir une nouvelle question s'il y a un nouveau problème pour le bénéfice et la brièveté de chacun. – notionquest