如何检查 Spring Data Cassandra Mapper 生成的查询字符串

How can I examine the query string generated by Spring Data Cassandra Mapper

如果我用 com.datastax.driver.mapping.annotations 中的注释注释 class,我可以按照以下行编写测试:

MappingManager manager = new MappingManager(session);
Mapper<MyAnnotatedClass> mapper = manager.mapper(MyAnnotatedClass.class);

MyAnnotatedClass entity = ...;

RegularStatement saveQuery = (RegularStatement) mapper.saveQuery(entity);

assertEquals("...", saveQuery.getQueryString());

但是我有实体 classes 用 org.springframework.data.cassandra.mapping 注释注释。我找不到与 MappersaveQuery()getQuery()deleteQuery().

等价的 Spring

我如何编写(理想情况下在运行时是轻量级的)关于从 Spring Data Cassandra 注释实体 classes 生成的 CQL 的测试?

使用 Apache Cassandra 1.5 的 Spring 数据,您可以编写以下代码来创建 Statements:

CassandraTemplate template = …

Person person = …

CqlIdentifier tableName = template.getTableName(Person.class);

Insert insert = CassandraTemplate.createInsertQuery(tableName.toCql(), person, 
                    new WriteOptions(), template.getConverter());

Delete delete = CassandraTemplate.createDeleteQuery(tableName.toCql(), person,
                    new WriteOptions(), template.getConverter());

Update update = CassandraTemplate.createUpdateQuery(tableName.toCql(), person, 
                    new WriteOptions(), template.getConverter());

注意:Spring Apache Cassandra 1.5 的数据使用 BATCH 语句进行插入,这将随着 2.0 版的发布而改变。

CassandraTemplateCassandraConverter 是 1.5 版查询创建中涉及的关键 类。在 Spring Data 2.0 中,事情会发生一些变化,因为 2.0 将附带额外的 QueryUpdate 类型用于部分实体更新。因此查询创建从 CassandraTemplate.create…Query(…) 移动到 QueryUtils.create…Query(…)