对于最新的稳定版本,请使用 Spring Data Cassandra 4.5.2! |
从 1.x 到 2.x 的迁移指南
Spring Data for Apache Cassandra 2.0 在从早期版本升级时引入了一组重大更改:
-
合并了
spring-cql
和spring-data-cassandra
模块转换为单个模块。 -
将异步和同步作分开
CqlOperations
和CassandraOperations
转换为专用界面和模板。 -
修订了
CqlTemplate
API 与JdbcTemplate
. -
删除了
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.4.8</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
但使用允许重用和精细控制获取大小、一致性级别和重试策略的实例。 您可以获取CqlOperations
通过CassandraTemplate.getCqlOperations()
. 由于更改,依赖注入CqlTemplate
需要额外的 Bean 设置。 -
CqlTemplate
现在反映基本的 CQL作,而不是混合使用高级和低级 API 调用(例如count(…)
对execute(…)
),并且简化的方法集与 Spring Frameworks 的JdbcTemplate
具有方便的回调接口。 -
异步方法在
AsyncCqlTemplate
和AsyncCassandraTemplate
通过使用ListenableFuture
. 我们删除了Cancellable
以及各种异步回调侦听器。ListenableFuture
是一种灵活的方法,允许过渡到CompletableFuture
.
删除CassandraOperations.selectBySimpleIds()
该方法已被删除,因为它不支持复杂 ID。新引入的查询 DSL 允许对单列 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
强制执行非空对象,这些对象可从 staticempty()
工厂方法。
以下示例演示如何使用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(…)
.