Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于排序键的DynamoDB降序排序_Java_Spring_Spring Boot_Amazon Dynamodb_Dynamodb Queries - Fatal编程技术网

Java 基于排序键的DynamoDB降序排序

Java 基于排序键的DynamoDB降序排序,java,spring,spring-boot,amazon-dynamodb,dynamodb-queries,Java,Spring,Spring Boot,Amazon Dynamodb,Dynamodb Queries,目前,我正在使用SpringBoot和DynamoDB,并使用DynamoDBMapper进行所有DB操作。现在它根据排序键(字段名id)按升序排序。如何根据排序键值按降序排序 当前代码: @Override public PageImpl<Order> getCustomerOrders(Pageable pageable) { List<Order> orders = new ArrayList<>(); Map<String,

目前,我正在使用SpringBoot和DynamoDB,并使用DynamoDBMapper进行所有DB操作。现在它根据排序键(字段名
id
)按升序排序。如何根据排序键值按降序排序

当前代码:

@Override
public PageImpl<Order> getCustomerOrders(Pageable pageable) {

    List<Order> orders = new ArrayList<>();


    Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();


    DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
    List<String> exp = new ArrayList<>();


    // filters

    if (!exp.isEmpty())
        scanExpression
                .withFilterExpression(String.join(" AND ", exp)).withExpressionAttributeValues(eav);


    PaginatedScanList<Order> scan = mapper.scan(Order.class, scanExpression);




    int start = (int) pageable.getOffset();
    int size = scan.size();
    int end = (start + pageable.getPageSize()) > size ? size : (start + pageable.getPageSize());

    if (start < size)
        for (Order o : scan.subList(start, end)) {
            orders.add(o);
        }

    return new PageImpl<Order>(orders, pageable, size);
}
@覆盖
public PageImpl getCustomerOrders(可分页){
列表顺序=新的ArrayList();
Map eav=newhashmap();
DynamoDBScanExpression scanExpression=新的DynamoDBScanExpression();
List exp=new ArrayList();
//过滤器
如果(!exp.isEmpty())
scanExpression
.withFilterExpression(String.join(“AND”,exp))。WithExpressionAttributeValue(eav);
PaginatedScanList scan=mapper.scan(Order.class,scanExpression);
int start=(int)pageable.getOffset();
int size=scan.size();
int end=(start+pageable.getPageSize())>size?size:(start+pageable.getPageSize());
如果(开始<大小)
for(顺序o:扫描子列表(开始、结束)){
命令。加入(o);
}
返回新的PageImpl(订单、可分页、大小);
}
在谷歌搜索之后,我发现我需要将
ScanIndexForward
设置为
true
,但我仍然很困惑,如何使用DynamoDBMApper实现它


或者我需要使用DynamoDB或AmazonDynamoDb之类的低级类吗?

最后,感谢您的提示,我自己找到了解决方案。根据他的评论,
ScanIndexForward
只能与query选项一起使用,所以我刚刚更新了。我已经创建了对象并使用方法(false)更新了属性

完整java代码:

@Override
public PageImpl<Order> getAllProgramOrder(Pageable pageable, OrderFilter filter) {
    List<Order> orders = new ArrayList<>();


    DynamoDBQueryExpression<Order> queryExpression = new DynamoDBQueryExpression<Order>();

    queryExpression.setScanIndexForward(false);


    Map<String, AttributeValue> eav = new HashMap<String, AttributeValue>();
    eav.put(":val1", new AttributeValue().withS(authenticationFacade.getProgramId()));

    queryExpression.withKeyConditionExpression("hashKey = :val1 ")
            .withExpressionAttributeValues(eav);

    PaginatedQueryList<Order> scan = mapper.query(Order.class, queryExpression);


    int start = (int) pageable.getOffset();
    int size = scan.size();
    int end = (start + pageable.getPageSize()) > size ? size : (start + pageable.getPageSize());

    if (start < size)
        for (Order o : scan.subList(start, end)) {
            orders.add(o);
        }

    return new PageImpl<Order>(orders, pageable, size);
}
@覆盖
public PageImpl getAllProgramOrder(可分页、可分页、OrderFilter筛选器){
列表顺序=新的ArrayList();
DynamoDBQueryExpression queryExpression=新的DynamoDBQueryExpression();
queryExpression.setScanIndexForward(false);
Map eav=newhashmap();
eav.put(“:val1”,新的AttributeValue().with(authenticationFacade.getProgramId());
queryExpression.withKeyConditionExpression(“hashKey=:val1”)
.带有表达式属性值(eav);
PaginatedQueryList scan=mapper.query(Order.class,queryExpression);
int start=(int)pageable.getOffset();
int size=scan.size();
int end=(start+pageable.getPageSize())>size?size:(start+pageable.getPageSize());
如果(开始<大小)
for(顺序o:扫描子列表(开始、结束)){
命令。加入(o);
}
返回新的PageImpl(订单、可分页、大小);
}

Ref:

AFAIK,ScanIndexForward仅适用于查询,不适用于扫描。这里有类似的东西:。@ydrall:谢谢你的快速回复。。。。我会调查一下。。。。