java

2012-02-13 2 views
5

içinde batchGetItem API'sinde hata Sorgulama yapılamam& a RangeKey (Numara). ben mi batchGetItem kullandığınızda, ben şu hatayı alıyorum:java

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

Şema:

Table: Daily

Hash Key: CustId (String)

Range Key: Dated (Number)

veri:

CustId : VisioNerdy

Dated : 1329071400000

Kodu:

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); 

Herhangi bir ipuçları?

Sen türü olarak sizin Hash and Range Type Primary Key aralığı özelliğini tanımlanan Numara, henüz isteğiniz için türü olarak withS() aracılığıyla Dize onun özellik değerini hazırlamak var
+0

size (sonunda özet) şema ve kolaylığı için sorgu yürütülürken kod parçası eklemek misiniz analiz? Teşekkürler! –

+1

Sorunu, bunları içerecek şekilde düzenlediniz. Teşekkürler! –

+0

"If (ranges == null)" ifadesine sahipsiniz, ancak bir tablo bir aralık anahtarına sahipse, bir değer gereklidir; ihmal edemezsin. –

cevap

8

:

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

sorununuzu çözmek gerekir withS(String s)withN(String s) için değiştirme buna göre (her iki yöntem de karışık olarak, Dize türünde bir parametre gerektirir)

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

Kuşkusuz, parametreler sadece tam olarak gelişmekte kolaylaştırmak değil dize dayalı DynamoDB data types teslim örtük zayıf yazarak;)

+0

Anladım! Teşekkürler! –

+0

@Mani: Memnuniyetle yardımcı olabilirim - sorunun cevabını verdiyse, özellikle cevabı kabul edebilir misiniz, özellikle cevabı kabul edebilir misiniz? Bu, hem sorununuzu gözden kaçırmak hem de başkalarının açık problemlerine yer açmak ve kullanıcıların birbirlerini destekleme konusunda motive olmalarını sağlamak için burada istenir;) SSS [Nedir?] (Http: // stackoverflow .com/faq # şöhreti) - teşekkürler! –

+1

Bitti! Yol gösterdiğiniz için teşekkürler! –