如何从CassandraOperations流选择结果(而不是字符串查询结果)?

时间:2017-03-15 14:16:39

标签: java cassandra spring-data-cassandra

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()返回带有问号占位符而不是变量的查询。

我看到3个选项可以得到我想要的东西,但每个选项看起来都很糟糕:

有没有更好的方法来传输选择结果?

感谢。

1 个答案:

答案 0 :(得分:0)