使用spring-data-cassandra在cassandra中的分页和排序

问题描述 投票:0回答:1

首先,如果lib spring-data-cassandra的任何开发人员都读过我:谢谢的工作,lib就像一个魅力,并且已经很好地集成到spring项目中。

这里是几天前,我在尝试在Cassandra中使用分页时遇到问题。我找到了解决该问题的方法,并将说明我是如何做到的。

我的问题是,我一直在使用卡桑德拉分页,并且不得不遍历结果切片,并且一直有效,直到我决定在分页中使用排序。

为了达到我所使用的:-使用存储库扩展CassandraRepository的服务

这里是代码(包装存储库的服务)

public Slice<Pony> getAllByTypePage(Pageable p, EnumType type) {
        Slice<Pony> slice = ponyRepository.findAllByType(p.first(), type);
        //Iterate over slices
        while(slice.hasNext()&&slice.getPageable().getPageNumber()<p.getPageNumber())
        {
            slice = ponyRepository.findAllByType(slice.nextPageable(), type);   
        }
        return slice;
    }

Pony是我的模型en ponyRepository是我的CassandraReposity

@Repository
public interface PonyRepository extends CassandraRepository<Pony,UUID> {

    @Async
    CompletableFuture<Long> countByType(EnumType type);

    Slice<Pony> findAllByType(Pageable p,EnumType type);
}

[当我尝试获取页面时(除第一个页面以外),我得到此异常

com.datastax.driver.core.exceptions.PagingStateException:分页状态不匹配,这意味着页面状态的内容已更改,或者您试图将其应用于其他语句

经过一些调试后,我发现我在slice.nextPageable()中获得的可分页对象处于Sort.UNSORTED模式,而不是我的输入可分页。

然后,知道我已经解决了这个问题:

        public Slice<Pony> getAllByTypePage(Pageable p, EnumType type) {
        Slice<Pony> slice = ponyRepository.findAllByType(p.first(), type);
        //using a sidePageable and incrementing it in parallel
        Pageable sidePageable = p.first();
        //Iterate over slices
        while(slice.hasNext()&&sidePageable.getPageNumber()<p.getPageNumber())
        {
            CassandraPageRequest cpr = CassandraPageRequest.of(sidePageable.next(), ((CassandraPageRequest)slice.getPageable()).getPagingState());
            slice = ponyRepository.findAllByType(cpr, type);
            sidePageable=sidePageable.next();
        }
        return slice;
    }

解决方法似乎起作用。

这是正常现象还是错误?

我没有在吉拉看到任何与此相关的问题(也许我没有看过这个好地方)。

这是我使用的相关库(spring boot 2.2.1 / spring代码5.2.1):

spring-data-cassandra:2.2.1。发布cassandra-driver-core:3.7.2

我在弹簧芯5.1.5上看到了相同的行为

最佳问候

首先,如果有任何lib开发者spring-data-cassandra读过我的书:谢谢您的工作,该lib的工作就像一个魅力,已经很好地集成到spring项目中。这是几天前,我...

spring-data-cassandra
1个回答
0
投票

就像前面的评论中所说的,这是一个错误。该问题已得到解决(请参见前面链接的问题)。

© www.soinside.com 2019 - 2024. All rights reserved.