从 1.x 迁移到 2.x

从早期版本升级到 Apache Cassandra 2.0 的 Spring Data 引入了一系列重大更改

  • spring-cqlspring-data-cassandra 模块合并到单个模块中。

  • CqlOperationsCassandraOperations 中将异步和同步操作分离到专用的接口和模板中。

  • 修改了CqlTemplate API 以与JdbcTemplate 对齐。

  • 删除了CassandraOperations.selectBySimpleIds 方法。

  • CassandraRepository 使用了更好的名称。

  • 删除了 SD Cassandra ConsistencyLevelRetryPolicy 类型,转而使用 DataStax ConsistencyLevelRetryPolicy 类型。

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

  • QueryOptions 重构为不可变对象。

  • CassandraPersistentProperty 重构为单列。

弃用

  • 弃用QueryOptionsBuilder.readTimeout(long, TimeUnit),转而使用QueryOptionsBuilder.readTimeout(Duration)

  • 弃用CustomConversions,转而使用CassandraCustomConversions

  • 弃用BasicCassandraMappingContext,转而使用CassandraMappingContext

  • 弃用o.s.d.c.core.cql.CachedPreparedStatementCreator,转而使用o.s.d.c.core.cql.support.CachedPreparedStatementCreator

  • 弃用CqlTemplate.getSession(),转而使用getSessionFactory()

  • 弃用CqlIdentifier.cqlId(…)KeyspaceIdentifier.ksId(…),转而使用.of(…) 方法。

  • 弃用QueryOptions 的构造函数,转而使用它们的构建器。

  • 弃用TypedIdCassandraRepository,转而使用CassandraRepository

合并 Spring CQL 和 Spring Data Cassandra 模块

Spring CQL 和 Spring Data Cassandra 现在已合并到单个模块中。独立的spring-cql 模块不再可用。您可以在spring-data-cassandra 中找到所有合并的类型。以下清单显示了如何在 Maven 依赖项中包含spring-data-cassandra

<dependencies>

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

</dependencies>

通过合并,我们将所有 CQL 包合并到 Spring Data Cassandra 中

  • o.s.d.cql 移动到o.s.d.cassandra.core.cql 中。

  • o.s.d.cqlo.s.d.cassandra.config 合并,并展平了 XML 和 Java 子包。

  • CassandraExceptionTranslatorCqlExceptionTranslator 移动到o.s.d.c.core.cql 中。

  • 将 Cassandra 异常o.s.d.c.support.exception 移动到o.s.d.cassandra 中。

  • o.s.d.c.convert 移动到o.s.d.c.core.convert 中(影响转换器)。

  • o.s.d.c.mapping 移动到o.s.d.c.core.mapping 中(影响映射注释)。

  • MapIdo.s.d.c.repository 移动到o.s.d.c.core.mapping 中。

[[revised-cqltemplate/cassandratemplate]] == 修改后的CqlTemplate/CassandraTemplate

我们以三种方式拆分了CqlTemplateCassandraTemplate

  • CassandraTemplate 不再是CqlTemplate,而是使用一个允许重用并对获取大小、一致性级别和重试策略进行细粒度控制的实例。您可以通过CassandraTemplate.getCqlOperations() 获取CqlOperations。由于更改,CqlTemplate 的依赖注入需要额外的 bean 设置。

  • CqlTemplate 现在反映了基本的 CQL 操作,而不是混合高级和低级 API 调用(例如count(…)execute(…)),并且减少的方法集与 Spring Framework 的JdbcTemplate 及其方便的回调接口保持一致。

  • 异步方法通过使用ListenableFutureAsyncCqlTemplateAsyncCassandraTemplate 上重新实现。我们删除了Cancellable 和各种异步回调侦听器。ListenableFuture 是一种灵活的方法,并允许转换为CompletableFuture

删除了CassandraOperations.selectBySimpleIds()

删除该方法是因为它不支持复杂 ID。新引入的查询 DSL 允许为单列 ID 映射和复杂 ID,如下例所示

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

CassandraRepository 的更好名称

我们重命名了CassandraRepositoryTypedIdCassandraRepository,以使 Spring Data Cassandra 的命名与其他 Spring Data 模块保持一致

  • CassandraRepository 重命名为MapIdCassandraRepository

  • TypedIdCassandraRepository 重命名为CassandraRepository

  • 引入了TypedIdCassandraRepository,它扩展了CassandraRepository 作为一种弃用类型以简化迁移

删除了 SD Cassandra ConsistencyLevelRetryPolicy 类型,转而使用 DataStax ConsistencyLevelRetryPolicy 类型

Spring Data Cassandra ConsistencyLevelRetryPolicy 已被删除。请使用 DataStax 驱动程序提供的类型。

Spring Data Cassandra 类型限制了 Cassandra 原生驱动程序中提供和允许的可用功能的使用。因此,每次驱动程序引入较新功能时,都需要更新 Spring Data Cassandra 的类型。

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

尽可能地,CQL 规范类型现在是值类型(例如 FieldSpecificationAlterColumnSpecification),并且对象通过静态工厂方法构建。这允许简单值对象的不可变性。配置器对象(例如 AlterTableSpecification)操作必填属性(例如表名或键空间名)最初通过静态工厂方法构建,并在创建所需状态之前允许进一步配置。

QueryOptions 重构为不可变对象

QueryOptionsWriteOptions 现在是不可变的,可以通过构建器创建。接受 QueryOptions 的方法强制执行非空对象,这些对象可从静态 empty() 工厂方法获得。以下示例显示了如何使用 QueryOptions.builder()

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

CassandraPersistentProperty 重构为单列

只有在您直接操作映射模型时,此更改才会影响您。

CassandraPersistentProperty 之前允许绑定多个列名以用于复合主键。CassandraPersistentProperty 的列现在减少为单个列。已解析的复合主键通过 MappingContext.getRequiredPersistentEntity(…) 映射到一个类。