Java 如何检查Spring数据Cassandra Mapper生成的查询字符串
如果我使用Java 如何检查Spring数据Cassandra Mapper生成的查询字符串,java,cassandra,spring-data-cassandra,Java,Cassandra,Spring Data Cassandra,如果我使用com.datastax.driver.mapping.annotations中的注释对一个类进行注释,我可以按照以下内容编写测试: MappingManager manager = new MappingManager(session); Mapper<MyAnnotatedClass> mapper = manager.mapper(MyAnnotatedClass.class); MyAnnotatedClass entity = ...; RegularStat
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());
MappingManager=新的MappingManager(会话);
Mapper Mapper=manager.Mapper(MyAnnotatedClass.class);
MyAnnotatedClass实体=。。。;
RegularStatement saveQuery=(RegularStatement)映射器.saveQuery(实体);
assertEquals(“…”,saveQuery.getQueryString());
然而,我用org.springframework.data.cassandra.mapping
注释了实体类。我找不到与Mapper
的saveQuery()
,getQuery()
和deleteQuery()相当的Spring
如何编写(理想情况下在运行时是轻量级的)关于从Spring数据Cassandra注释实体类生成的CQL的测试?对于Apache Cassandra 1.5的Spring数据,您可以编写以下代码来创建语句
s:
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());
注意:ApacheCassandra1.5的Spring数据使用BATCH
语句进行插入,这将随着2.0版的发布而改变
CassandraTemplate
和CassandraConverter
是1.5版查询创建中涉及的关键类。在SpringData2.0中,情况将发生一些变化,因为2.0将附带用于部分实体更新的附加查询
和更新
类型。因此,查询创建从CassandraTemplate.create…query(…)
移动到QueryUtils.create…query(…)
没有测试支持来验证从Spring数据Cassandra注释实体类派生的语句。查询字符串测试背后的动机是什么?@mp911de我想要一种测试驱动的方法,在处理注释时衡量因果关系。有人可能会说,只有在表中列出的东西的因果关系才是重要的,但现在我觉得我更喜欢更具契约性的东西。这就像一种魅力——谢谢。SELECT
是否有类似的功能?没有,因为在1.5中,您需要通过SELECT
或使用普通CQL进行选择。您可以更深入地创建基于实体类型和id()的WHERE
谓词,但这相当麻烦。