对于最新的稳定版本,请使用 Spring Data Cassandra 4.4.0! |
从 1.x 到 2.x 的迁移指南
Spring Data for Apache Cassandra 2.0 在从早期版本升级时引入了一组重大更改:
-
将 和 模块合并为一个模块。
spring-cql
spring-data-cassandra
-
将异步和同步操作分离到专用接口和模板中。
CqlOperations
CassandraOperations
-
修改了 API 以使其与 保持一致。
CqlTemplate
JdbcTemplate
-
已删除该方法。
CassandraOperations.selectBySimpleIds
-
使用了更好的名称。
CassandraRepository
-
删除了 SD Cassandra 和类型,以支持 DataStax 和类型。
ConsistencyLevel
RetryPolicy
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 现在合并到一个模块中。
独立模块不再可用。
您可以找到合并到 中的所有类型。
下面的清单显示了如何包含在你的 maven 依赖项中:spring-cql
spring-data-cassandra
spring-data-cassandra
<dependencies>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-cassandra</artifactId>
<version>4.3.6</version>
</dependency>
</dependencies>
通过合并,我们将所有 CQL 包合并到 Spring Data Cassandra 中:
-
已移至 。
o.s.d.cql
o.s.d.cassandra.core.cql
-
合并并扁平化了 XML 和 Java 子包。
o.s.d.cql
o.s.d.cassandra.config
-
已移动 和 到 .
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
不再是 A,而是使用允许重用和精细控制 fetch 大小、一致性级别和重试策略的实例。 您可以通过 获取 。 由于此更改,依赖项注入需要额外的 bean 设置。CqlTemplate
CqlOperations
CassandraTemplate.getCqlOperations()
CqlTemplate
-
CqlTemplate
现在反映基本的 CQL 操作,而不是混合高级和低级 API 调用(例如 vs),并且减少的方法集与 Spring 框架及其方便的回调接口保持一致。count(…)
execute(…)
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
我们重命名了 Spring Data Cassandra 命名,并将其与其他 Spring Data 模块保持一致:CassandraRepository
TypedIdCassandraRepository
-
已重命名为
CassandraRepository
MapIdCassandraRepository
-
已重命名为
TypedIdCassandraRepository
CassandraRepository
-
引入,扩展为已弃用的类型以简化迁移
TypedIdCassandraRepository
CassandraRepository
删除了 SD Cassandra 和类型,以支持 DataStax 和类型ConsistencyLevel
RetryPolicy
ConsistencyLevel
RetryPolicy
Spring Data Cassandra 的 ,已被删除。
请使用 DataStax 驱动程序提供的类型。ConsistencyLevel
RetryPolicy
Spring Data Cassandra 类型限制了对 Cassandra 本机驱动程序中提供并允许的可用功能的使用。 因此, Spring Data Cassandra 的类型在每次驱动程序引入新功能时都需要更新。
重构了 CQL 规范以值对象和配置器
CQL 规范类型现在尽可能多地是值类型(例如 , ),并且对象由静态工厂方法构造。
这允许简单值对象的不可变性。
对强制属性(例如 table name 或 keyspace name)进行操作的 Configurator 对象(例如 )最初是通过静态工厂方法构建的,并允许进一步配置,直到创建所需的状态。FieldSpecification
AlterColumnSpecification
AlterTableSpecification
重构为 Immutable ObjectsQueryOptions
QueryOptions
现在是不可变的,可以通过构建器创建。
接受的方法强制执行非 null 对象,这些对象可从静态工厂方法获得。
以下示例演示如何使用:WriteOptions
QueryOptions
empty()
QueryOptions.builder()
QueryOptions queryOptions = QueryOptions.builder()
.consistencyLevel(ConsistencyLevel.ANY)
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
.readTimeout(Duration.ofSeconds(10))
.fetchSize(10)
.tracing(true)
.build();
重构为单列CassandraPersistentProperty
仅当您直接对映射模型进行操作时,此更改才会影响 You。
CassandraPersistentProperty
允许以前绑定多个列名以供复合主键使用。
a 的列现在减少为单个列。
解析的复合主键通过 映射到类。CassandraPersistentProperty
MappingContext.getRequiredPersistentEntity(…)