2012-02-13 11 views
5

私が照会しているエンティティは、HashKey & RangeKey(数値)です。私はそれにbatchGetItemを使用すると、私は次のエラーを取得する:JavaのbatchGetItem APIのエラー

AWS Error Code: ValidationException, AWS Error Message: One or more parameter values were invalid: Mismatching attribute types between location and schema

スキーマ:

Table: Daily

Hash Key: CustId (String)

Range Key: Dated (Number)

は、Data:

CustId : VisioNerdy

Dated : 1329071400000

コード:

List<Key> fkeys = new ArrayList<Key>(); //tableName="Daily", keys=["VisioNerdy"], ranges=[1329071400000] 
    Map<String, KeysAndAttributes> requestItems = new HashMap<String, KeysAndAttributes>(); 
    for(int i = 0; i < keys.size(); i++) 
    { 
     String key = keys.get(i); 
     if(ranges == null) 
      fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key))); 
     else 
      fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key)) 
        .withRangeKeyElement(new AttributeValue().withS(ranges.get(i).toString()))); 
    } 
    requestItems.put(tableName, new KeysAndAttributes().withKeys(fkeys)); 
    BatchGetItemRequest batchGetItemRequest = new BatchGetItemRequest().withRequestItems(requestItems); 
    BatchGetItemResult result = client.batchGetItem(batchGetItemRequest); 

任意の手がかり?

+0

あなたは(最終的に凝縮)スキーマと容易にするために、クエリを実行するコードの断片を追加してもらえ分析?ありがとう! –

+1

質問を編集して追加しました。ありがとう! –

+0

"if(ranges == null)"がありますが、テーブルに範囲キーがある場合は値が必要です。あなたはそれを省略できません。 –

答えて

8

あなたがタイプとしてをごHash and Range Type Primary Keyの範囲属性を定義し、まだあなたの要求のためのタイプ文字列としてwithS()を経由してその属性値を準備している:あなたの問題を解決する必要がありwithN(String s)withS(String s)を変更

fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key)) 
     .withRangeKeyElement(new AttributeValue().withS(ranges.get(i).toString()))); 

それに応じて(紛らわしく両方の方法はタイプの文字列を必要とします)

fkeys.add(new Key().withHashKeyElement(new AttributeValue().withS(key)) 
     .withRangeKeyElement(new AttributeValue().withN(ranges.get(i).toString()))); 

確かに、パラメータのみを正確に開発緩和しない文字列に基づいてDynamoDB data types提出の暗黙の弱い型付け;)

+0

ありがとう! –

+0

@マニ:喜んで助けてくれるかもしれません - あなたの問題を解決した場合は、アップボートして、特に答えを受け入れることができますか?これは、あなたの問題を視界から外して、他の人のオープンな問題のためのスペースを作り、ユーザーが互いを助ける動機を保つことを保証するために、ここで望まれています)FAQ [What is reputation?](http:// stackoverflow .com/faq#評判) - ありがとう! –

+1

完了!ガイドありがとう! –