Cum pot prelua toate elementele din rezultatul paginat al unei interogări DynamoDBMapper ()?

Încerc să interoghez DynamoDB cu ajutorul DynamoDBMapper în Java atât cu hashKey, cât și cu rangeKey. Dar nu primesc toate rezultatele, ea returnează doar o parte din ea. Codul meu arată astfel:

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 myobjs = mapper.query(MyObj.class, queryExpression);
    return myobjs;
}

MyObj is properly annotated with DynamoDB annotations. So I am able to save the objects, but retrieval returns a partial result only.

Documentația interogare din DynamoDBMapper spune:

Metoda de interogare returnează colecția "leneș încărcat". Aceasta este, inițial, returnează doar o singură pagină de rezultate. Efectuează un apel de serviciu pentru următoarea pagină când este necesar.

Acum, întrebarea este cum să-i spuneți cartografului să efectueze un apel de serviciu sau că este necesară o pagină, astfel încât să încarce toate paginile (în mod efectiv toate intrările)?

8

1 răspunsuri

Fragmentul de cod Java din documentația Amazon DynamoDB pentru Clasa DynamoDBMapper este puțin cam nefericită aici (deși tehnologic corectă), AWS SDK pentru Java Documentația API pentru Clasa DynamoDBMapper este (în mod natural) mai precisă în această privință, vezi metoda interogare ( ) :

public  PaginatedQueryList query(Class clazz,
                                       DynamoDBQueryExpression queryExpression)

Deci tipul returnat este de fapt Class PaginatedQueryList :

Implementarea interfeței listă care reprezintă rezultatele din   o interogare în AWS DynamoDB. Rezultatele paginate sunt încărcate la cerere atunci când   utilizatorul execută o operațiune care le cere. Unele operațiuni,   cum ar fi dimensiunea (), trebuie să preia întreaga listă , dar rezultatele sunt leneșe   strânse pagină cu pagină atunci când este posibil. [accent pe a mea]

That is, you really do not need to explicitly load anything during normal usage, insofar it is implicitly taken care of by the lazy-loading implementation of PaginatedQueryList; however, if so desired for whatever reason, you can trigger it by operations requiring access to the entire collection, with the explicitly mentioned size() method being one of them apparently.

9
adăugat
Deschideți, sunt de acord cu răspunsul dvs., Se pare că sunt în aceeași problemă. Întrebarea este aici, stackoverflow.com/întrebări/45495145/& hellip;
adăugat autor User0911, sursa