此版本仍在开发中,尚未被视为稳定版本。如需最新稳定版本,请使用 Spring Data Cassandra 5.0.4spring-doc.cadn.net.cn

从 1.x 迁移到 2.x 的迁移指南

Spring Data for Apache Cassandra 2.0 在从早期版本升级时引入了一系列破坏性变更:spring-doc.cadn.net.cn

弃用

  • 弃用 QueryOptionsBuilder.readTimeout(long, TimeUnit),推荐使用 QueryOptionsBuilder.readTimeout(Duration)spring-doc.cadn.net.cn

  • 弃用 CustomConversions,推荐使用 CassandraCustomConversionsspring-doc.cadn.net.cn

  • 弃用 BasicCassandraMappingContext,推荐使用 CassandraMappingContextspring-doc.cadn.net.cn

  • 弃用 o.s.d.c.core.cql.CachedPreparedStatementCreator,推荐使用 o.s.d.c.core.cql.support.CachedPreparedStatementCreatorspring-doc.cadn.net.cn

  • 弃用 CqlTemplate.getSession(),推荐使用 getSessionFactory()spring-doc.cadn.net.cn

  • 弃用 CqlIdentifier.cqlId(…)KeyspaceIdentifier.ksId(…),推荐使用 .of(…) 方法。spring-doc.cadn.net.cn

  • 弃用 QueryOptions 的构造函数,推荐使用其构建器(builder)。spring-doc.cadn.net.cn

  • 弃用 TypedIdCassandraRepository,推荐使用 CassandraRepositoryspring-doc.cadn.net.cn

合并 Spring CQL 和 Spring Data Cassandra 模块

Spring CQL 和 Spring Data Cassandra 现已合并为一个单独的模块。 独立的 spring-cql 模块不再可用。 所有相关类型现已合并到 spring-data-cassandra 中。 以下清单展示了如何在 Maven 依赖中引入 spring-data-cassandraspring-doc.cadn.net.cn

<dependencies>

  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-cassandra</artifactId>
    <version>5.1.0-SNAPSHOT</version>
  </dependency>

</dependencies>

通过此次合并,我们将所有 CQL 包都整合进了 Spring Data Cassandra:spring-doc.cadn.net.cn

[[revised-cqltemplate/cassandratemplate]] == 修订后的 CqlTemplate/CassandraTemplatespring-doc.cadn.net.cn

我们从三个方面对 CqlTemplateCassandraTemplate 进行了拆分:spring-doc.cadn.net.cn

  • CassandraTemplate 不再是 CqlTemplate,而是使用一个实例,该实例允许复用,并对获取大小(fetch size)、一致性级别(consistency levels)和重试策略(retry policies)进行细粒度控制。 您可以通过 CqlOperations 获取 CassandraTemplate.getCqlOperations()。 由于这一变更,CqlTemplate 的依赖注入需要额外的 Bean 配置。spring-doc.cadn.net.cn

  • CqlTemplate 现在体现的是基本的 CQL 操作,而非混合使用高层和低层 API 调用(例如 count(…)execute(…)),并且其精简后的方法集已与 Spring Framework 的 JdbcTemplate 保持一致,并提供了便捷的回调接口。spring-doc.cadn.net.cn

  • 异步方法在 AsyncCqlTemplateAsyncCassandraTemplate 中通过使用 ListenableFuture 重新实现。 我们移除了 Cancellable 以及各种异步回调监听器。ListenableFuture 是一种灵活的方式,并允许转换为 CompletableFuturespring-doc.cadn.net.cn

已移除CassandraOperations.selectBySimpleIds()

该方法已被移除,因为它不支持复杂 ID。 新引入的查询 DSL 允许为单列 ID 使用映射的和复杂的 ID,如下例所示:spring-doc.cadn.net.cn

cassandraTemplate.select(Query.query(Criteria.where("id").in(…)), Person.class)

更好的命名CassandraRepository

我们将 CassandraRepositoryTypedIdCassandraRepository 重命名,以使 Spring Data Cassandra 的命名与其他 Spring Data 模块保持一致:spring-doc.cadn.net.cn

已移除 SD CassandraConsistencyLevelRetryPolicy选择 DataStax 的类型ConsistencyLevelRetryPolicy类型

Spring Data Cassandra 的 ConsistencyLevelRetryPolicy 已被移除。 请使用 DataStax 驱动程序提供的类型。spring-doc.cadn.net.cn

Spring Data Cassandra 的类型限制了 Cassandra 原生驱动程序所提供和允许使用的功能。 因此,每当驱动程序引入新功能时,Spring Data Cassandra 的类型都需要进行更新。spring-doc.cadn.net.cn

将 CQL 规范重构为值对象和配置器

尽可能地,CQL 规范类型现在都是值类型(例如 FieldSpecificationAlterColumnSpecification),并通过静态工厂方法来构造对象。 这使得简单的值对象可以具备不可变性。 对必需属性(例如表名或 keyspace 名称)进行操作的配置器对象(例如 AlterTableSpecification)最初通过静态工厂方法构建,并允许进一步配置,直到达到所需的状态。spring-doc.cadn.net.cn

已重构QueryOptions成为不可变对象

QueryOptionsWriteOptions 现在是不可变的,可以通过构建器(builder)创建。 接受 QueryOptions 的方法强制要求传入非空对象,这些对象可通过静态的 empty() 工厂方法获取。 以下示例展示了如何使用 QueryOptions.builder()spring-doc.cadn.net.cn

QueryOptions queryOptions = QueryOptions.builder()
		.consistencyLevel(ConsistencyLevel.ANY)
		.retryPolicy(FallthroughRetryPolicy.INSTANCE)
		.readTimeout(Duration.ofSeconds(10))
		.fetchSize(10)
		.tracing(true)
		.build();

已重构CassandraPersistentProperty切换为单列布局

仅当您直接操作映射模型时,此更改才会影响您。spring-doc.cadn.net.cn

CassandraPersistentProperty 此前允许多个列名绑定以用于复合主键。 现在,CassandraPersistentProperty 的列已缩减为单个列。 解析后的复合主键通过 MappingContext.getRequiredPersistentEntity(…) 映射到一个类。spring-doc.cadn.net.cn