2012-05-29 44 views
8

我正在用Java和DynamoDBMapper的幫助來查詢DynamoDB中的hashKey和rangeKey。但我沒有得到所有結果,只返回其中的一部分。我的代碼如下所示:如何從DynamoDBMapper查詢()的分頁結果中檢索所有項目?

queryDynamoDb() { 
    Condition rangeKeyCondition = new Condition() 
    .withComparisonOperator(ComparisonOperator.GT.toString()) 
    .withAttributeValueList(new AttributeValue().withS("0")); 

    DynamoDBQueryExpression queryExpression = new DynamoDBQueryExpression(
      new AttributeValue().withS(prefKey)); 

    queryExpression.setRangeKeyCondition(rangeKeyCondition); 

    List<MyObj> myobjs = mapper.query(MyObj.class, queryExpression); 
    return myobjs; 
} 

MyObj正確地與DynamoDB的註解。所以我可以保存對象,但檢索只返回部分結果。

查詢DynamoDBMapper文檔說:

查詢方法返回「懶加載」的集合。也就是說,最初它只返回一頁結果。它會在需要時爲下一頁提供服務。

現在的問題是,如何告訴映射器進行服務調用或需要頁面,因此它會加載所有頁面(實際上是所有條目)?

回答

9

Amazon DynamoDB文檔的DynamoDBMapper Class內的Java代碼片斷是有點可惜這裏(雖然在技術上是正確的),爲Class DynamoDBMapperAWS SDK for Java API文檔(自然)在這方面更精確,請參閱方法query()

public <T> PaginatedQueryList<T> query(Class<T> clazz, 
             DynamoDBQueryExpression queryExpression) 

,返回的類型實際上是一個Class PaginatedQueryList:代表來回結果List接口的

實施在AWS DynamoDB中查詢一個查詢。 當 用戶執行需要它們的操作時,按需加載分頁結果某些操作, 如大小(),必須獲取整個列表,但結果是懶洋洋地 獲取一頁一頁的時候可能。 [強調雷]

也就是說,你真的不需要在正常使用過程中顯式地加載任何東西,只要它是由延遲加載執行PaginatedQueryList<T>隱含的照顧;然而,如果出於任何原因如此期望,您可以通過需要訪問整個集合的操作來觸發它,明顯提到的size()方法就是其中之一。

+0

打開,我同意你的回答,看起來像我陷入了同樣的問題。問題在這裏,https://stackoverflow.com/questions/45495145/issue-with-caching-and-dynamo-db-combination – Deepak

相關問題