此版本仍在开发中,尚未被视为稳定版本。对于最新的稳定版本,请使用 Spring Data Cassandra 4.4.0! |
从 1.x 到 2.x 的迁移指南
Spring Data for Apache Cassandra 2.0 在从早期版本升级时引入了一组重大更改:
-
合并了
spring-cql
和spring-data-cassandra
modules 中。 -
中分离的异步和同步作
CqlOperations
和CassandraOperations
导入到专用界面和模板中。 -
修改了
CqlTemplate
要与之保持一致的 APIJdbcTemplate
. -
删除了
CassandraOperations.selectBySimpleIds
方法。 -
使用更好的名称
CassandraRepository
. -
删除了 SD Cassandra
ConsistencyLevel
和RetryPolicy
支持 DataStax 的类型ConsistencyLevel
和RetryPolicy
类型。 -
重构了 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
.
下面的清单显示了如何包括spring-data-cassandra
在您的 maven 依赖项中:
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>4.5.0-SNAPSHOT</version>
</dependency>
</dependencies>
通过合并,我们将所有 CQL 包合并到 Spring Data Cassandra 中:
-
搬
o.s.d.cql
到o.s.d.cassandra.core.cql
. -
合并
o.s.d.cql
跟o.s.d.cassandra.config
并扁平化了 XML 和 Java 子包。 -
搬
CassandraExceptionTranslator
和CqlExceptionTranslator
自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
(影响映射注释)。 -
搬
MapId
从o.s.d.c.repository
自o.s.d.c.core.mapping
.
[[修订的 cqltemplate/cassandratemplate]]
== 已修订CqlTemplate
/CassandraTemplate
我们分开CqlTemplate
和CassandraTemplate
以三种方式:
-
CassandraTemplate
不再是CqlTemplate
而是使用允许重用和精细控制 fetch 大小、一致性级别和重试策略的实例。 您可以获取CqlOperations
通过CassandraTemplate.getCqlOperations()
. 由于更改,对CqlTemplate
需要额外的 bean 设置。 -
CqlTemplate
现在反映基本的 CQL作,而不是混合使用高级和低级 API 调用(例如count(…)
对execute(…)
),并且 reduced 方法集与 Spring Framework 的JdbcTemplate
及其方便的回调接口。 -
异步方法在
AsyncCqlTemplate
和AsyncCassandraTemplate
通过使用ListenableFuture
. 我们删除了Cancellable
以及各种异步回调侦听器。ListenableFuture
是一种灵活的方法,并允许转换为CompletableFuture
.
删除CassandraOperations.selectBySimpleIds()
该方法已被删除,因为它不支持复杂 ID。 新引入的查询 DSL 允许对单列 ID 使用映射 ID 和复杂 ID,如下例所示:
cassandraTemplate.select(Query.query(Criteria.where("id").in(…)), Person.class)
更好的名称CassandraRepository
我们将CassandraRepository
和TypedIdCassandraRepository
要将 Spring Data Cassandra 命名与其他 Spring Data 模块保持一致:
-
重 命名
CassandraRepository
自MapIdCassandraRepository
-
重 命名
TypedIdCassandraRepository
自CassandraRepository
-
介绍
TypedIdCassandraRepository
扩展CassandraRepository
作为已弃用的类型来简化迁移
删除了 SD CassandraConsistencyLevel
和RetryPolicy
支持 DataStax 的类型ConsistencyLevel
和RetryPolicy
类型
Spring Data CassandraConsistencyLevel
和RetryPolicy
已被删除。
请使用 DataStax 驱动程序提供的类型。
Spring Data Cassandra 类型限制了对 Cassandra 本机驱动程序中提供并允许的可用功能的使用。 因此, Spring Data Cassandra 的类型在每次驱动程序引入新功能时都需要更新。
重构了 CQL 规范以值对象和配置器
CQL 规范类型现在尽可能地是值类型(例如FieldSpecification
,AlterColumnSpecification
),对象由静态工厂方法构造。
这允许简单值对象的不可变性。
Configurator 对象(例如AlterTableSpecification
)最初通过静态工厂方法构造,并允许进一步配置,直到创建所需的状态。
重构QueryOptions
成为不可变对象
QueryOptions
和WriteOptions
现在是不可变的,并且可以通过构建器创建。
接受QueryOptions
强制使用非 null 对象,这些对象可从 static 获得empty()
factory 方法。
以下示例演示如何使用QueryOptions.builder()
:
QueryOptions queryOptions = QueryOptions.builder()
.consistencyLevel(ConsistencyLevel.ANY)
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
.readTimeout(Duration.ofSeconds(10))
.fetchSize(10)
.tracing(true)
.build();
重构CassandraPersistentProperty
到 Single-column
仅当您直接对映射模型进行作时,此更改才会影响 You。
CassandraPersistentProperty
允许以前绑定多个列名以供复合主键使用。
的列CassandraPersistentProperty
现在缩减为单个列。
解析的复合主键通过MappingContext.getRequiredPersistentEntity(…)
.