【问题标题】:How can I examine the query string generated by Spring Data Cassandra Mapper如何检查 Spring Data Cassandra Mapper 生成的查询字符串
【发布时间】:2017-12-27 13:06:38
【问题描述】:

如果我使用来自com.datastax.driver.mapping.annotations 的注解来注解一个类,我可以编写一个类似以下行的测试:

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

MyAnnotatedClass entity = ...;

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

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

但是,我有使用org.springframework.data.cassandra.mapping 注释注释的实体类。我一直找不到与 MappersaveQuery()getQuery()deleteQuery() 等效的 Spring。

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

【问题讨论】:

  • 没有测试支持来验证从 Spring Data Cassandra 注释的实体类派生的语句。您在查询字符串测试背后的动机是什么?
  • @mp911de 我想要一种测试驱动的方式来衡量处理注释时的因果关系。有人可能会争辩说,就表格中的结果而言,只有因果关系才是重要的,但现在我觉得我更喜欢更具合同性的东西。

标签: java cassandra spring-data-cassandra


【解决方案1】:

使用 Spring Data for Apache Cassandra 1.5,您可以编写以下代码来创建 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());

注意:Apache Cassandra 1.5 的 Spring Data 使用 BATCH 语句进行插入,这将在 2.0 版中发生变化。

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

【讨论】:

  • 这就像一个魅力 - 谢谢。 SELECT 有类似的吗?
  • 不,因为在 1.5 中,您需要传入 Select 或使用纯 CQL 进行选择。您可以更深入地根据实体类型和 id (github.com/spring-projects/spring-data-cassandra/blob/…) 创建 WHERE 谓词,但这很麻烦。
猜你喜欢
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-08-31
  • 1970-01-01
  • 2014-07-31
  • 2019-02-20
  • 2021-05-25
  • 2017-05-13
相关资源
最近更新 更多