如何从 CassandraOperations 流式传输 Select 结果(不是字符串查询结果)?

How to stream Select results (not String query results) from CassandraOperations?

Spring Data Cassandra 1.5.0 在 CassandraTemplate 中附带了一个流 API。我正在使用 spring-data-cassandra 1.5.1。我有这样的代码:

    String tableName = cassandraTemplate.getTableName(MyEntity.class).toCql();
    Select select = QueryBuilder.select()
            .all()
            .from(tableName);
    // In real world, WHERE statement is much more complex
    select.where(eq(ENTITY_FIELD_NAME, expectedField)) 
    List<MyEntity> result = cassandraTemplate.select(select, MyEntity.class);

并想用 iterable 或 Java 8 Stream 替换此代码,以避免一次将大量结果列表提取到内存中。

我要找的是像CassandraOperations.stream(Select query, Class<T> entityClass)这样的方法签名,但是没有。

CassandraOperations 中唯一可用的方法接受查询字符串:stream(String query, Class<T> entityClass)。我试图在这里传递一个由 Select 生成的字符串,比如

cassandraTemplate.stream(select.getQueryString(), MyEntity.class)

但是 InvalidQueryException: Invalid amount of bind variables 失败了,因为 getQueryString() returns 查询使用问号占位符而不是变量。

我看到 3 个选项可以得到我想要的,但每个选项看起来都不好:

是否有更好的方式来流式传输选择结果?

谢谢。

所以,到目前为止,我的问题的答案是等到 spring-data-cassandra 2.0.0 的稳定版本出来:

https://github.com/spring-projects/spring-data-cassandra/blob/2.0.x/spring-data-cassandra/src/main/java/org/springframework/data/cassandra/core/CassandraTemplate.java#L208