Spring 使用 Cassandra 启动 2.6 分页
Spring boot 2.6 pagination with Cassandra
我需要使用 Spring boot 和 Cassandra 实现分页。我找到了很酷的解决方案 here
但是,它使用旧版本的 Spring 启动 - 2.1.6.RELEASE
,我的是 2.6.4
。
我的情况的主要区别是当我用旧版本调用 pageRequest.getPagingState()
时,它 returns com.datastax.driver.core.PagingState
对象我可以映射到 String
和 return 到客户端,反之亦然:我可以从字符串值中获取此对象。
但是我的 Spring returns java.nio.ByteBuffer
版本,我不明白我与那有什么关系。
是否有任何方法可以从这个 ByteBuffer 中获取 String
或者其他实现分页的方法?
P.S。我知道迭代器的解决方案,但不认为将所有对象保存在内存中是个好主意(以防我有数百万个对象)。
P.S.S.我还尝试使用 byteBuffer.array()
从 ByteBuffer 获取字节,但它抛出异常
这就是我的情况。从 String
检索:
@GetMapping("/test")
public Pageable test(@RequestParam Integer pageSize, @RequestParam String pagingState) {
ByteBuffer byteBuffer = com.datastax.oss.protocol.internal.util.Bytes.fromHexString(pagingState);
Pageable pageable = PageRequest.of(0, pageSize); // a page number might be any and the result depends only on paging state
CassandraPageRequest pageRequest = CassandraPageRequest.of(pageable, byteBuffer);
Slice<Test> all = repository.findAll(pageRequest1);
return all.getPageable();
}
映射 ByteBuffer
到 String
:
Slice<Test> tests = repository.findAll(pageRequest);
CassandraPageRequest cassandraPageRequest = (CassandraPageRequest) tests.getPageable();
ByteBuffer pagingState = cassandraPageRequest.getPagingState();
String pagingStateStr = com.datastax.oss.protocol.internal.util.Bytes.toHexString(pagingState);
我需要使用 Spring boot 和 Cassandra 实现分页。我找到了很酷的解决方案 here
但是,它使用旧版本的 Spring 启动 - 2.1.6.RELEASE
,我的是 2.6.4
。
我的情况的主要区别是当我用旧版本调用 pageRequest.getPagingState()
时,它 returns com.datastax.driver.core.PagingState
对象我可以映射到 String
和 return 到客户端,反之亦然:我可以从字符串值中获取此对象。
但是我的 Spring returns java.nio.ByteBuffer
版本,我不明白我与那有什么关系。
是否有任何方法可以从这个 ByteBuffer 中获取 String
或者其他实现分页的方法?
P.S。我知道迭代器的解决方案,但不认为将所有对象保存在内存中是个好主意(以防我有数百万个对象)。
P.S.S.我还尝试使用 byteBuffer.array()
从 ByteBuffer 获取字节,但它抛出异常
这就是我的情况。从 String
检索:
@GetMapping("/test")
public Pageable test(@RequestParam Integer pageSize, @RequestParam String pagingState) {
ByteBuffer byteBuffer = com.datastax.oss.protocol.internal.util.Bytes.fromHexString(pagingState);
Pageable pageable = PageRequest.of(0, pageSize); // a page number might be any and the result depends only on paging state
CassandraPageRequest pageRequest = CassandraPageRequest.of(pageable, byteBuffer);
Slice<Test> all = repository.findAll(pageRequest1);
return all.getPageable();
}
映射 ByteBuffer
到 String
:
Slice<Test> tests = repository.findAll(pageRequest);
CassandraPageRequest cassandraPageRequest = (CassandraPageRequest) tests.getPageable();
ByteBuffer pagingState = cassandraPageRequest.getPagingState();
String pagingStateStr = com.datastax.oss.protocol.internal.util.Bytes.toHexString(pagingState);