2013-05-31 68 views
0

我下載了AWS Java SDK的1.4.5版本,並且無法在DynamoDB表上遷移查詢。這是一個簡單的哈希+範圍查詢。DynamoDBMapper v2異常

V1工程確定:

Condition c = new Condition().withComparisonOperator(ComparisonOperator.LT) 
         .withAttributeValueList(new AttributeValue(new Date().toString())); 
DynamoDBQueryExpression q = new DynamoDBQueryExpression(new AttributeValue("john")).withRangeKeyCondition(c); 

的API V2似乎工作有點不同。方法簽名更改需要的代碼重新寫爲:

Condition c = new Condition().withComparisonOperator(ComparisonOperator.LT) 
           .withAttributeValueList(new AttributeValue(new Date().toString())); 
DynamoDBQueryExpression q = new DynamoDBQueryExpression() 
            .withIndexName("user") 
            .withHashKeyValues("john") 
            .withRangeKeyCondition("timestamp", c); 

的AWS SDK拋出異常:

The range key(timestamp) in the query is the primary key of the table, not the range key of index(user)           

沒有任何一個有說明如何與新的執行查詢的代碼示例DynamoDB v2 api?

+0

什麼是散列和範圍屬性名稱? –

+0

陳,表名是帶有散列和範圍鍵的用戶。已經是「用戶」,範圍是「時間戳」。注意:因爲我在StackOverflow上發佈了這個,所以我已經能夠使用AWS的低級Java API工作。我仍然無法使用更高級別的API來解決這個問題。 –

回答

1

對不起,如果這是遲到,但如果它可以幫助你或其他人,你的代碼問題是當你打電話.withIndexName("john")

使用withIndexName()可以使用本地或全局二級索引進行查詢;不適用於使用表的散列鍵或散列鍵和範圍鍵的查詢。 DynamoDB正在尋找名爲"john"的本地或全局二級索引,當您要執行的操作是使用散列碼"john"搜索項目時。