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个选项可以得到我想要的东西,但每个选项看起来都很糟糕:
QueryBuilder
select.getQueryString()
,然后通过BoundStatement
有没有更好的方法来传输选择结果?
感谢。
答案 0 :(得分:0)
所以,截至目前,我的问题的答案是等到spring-data-cassandra
2.0.0
的稳定版本出来: