Migration Guide from 1.x to 2.x
用于 Apache Cassandra 的 Spring Data 2.0 在从早期的版本升级时引入了一组重大更改:
-
将
spring-cql和spring-data-cassandra模块合并到一个模块。 -
在
CqlOperations和CassandraOperations中将异步操作和同步操作分离到专用的界面和模板。 -
修改
CqlTemplateAPI 使其与JdbcTemplate对齐。 -
Removed the
CassandraOperations.selectBySimpleIdsmethod. -
为
CassandraRepository使用更好的名称。 -
删除 SD Cassandra
ConsistencyLevel和RetryPolicy类型,转而使用 DataStaxConsistencyLevel和RetryPolicy类型。 -
将 CQL 规范重构为值对象和配置器。
-
重构
QueryOptions以使其成为不可变对象。 -
Refactored
CassandraPersistentPropertyto single-column.
Deprecations
-
弃用
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
Merged Spring CQL and Spring Data Cassandra Modules
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>{version}</version>
</dependency>
</dependencies>
通过合并,我们将所有 CQL 包合并到 Spring Data Cassandra 中:
-
Moved
o.s.d.cqlintoo.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。
[[revised-cqltemplate/cassandratemplate]]== 已修改的 CqlTemplate/CassandraTemplate
我们以三种方式分隔 CqlTemplate 和 CassandraTemplate:
-
CassandraTemplate不再是CqlTemplate,而是使用允许重复使用和对获取大小、一致性级别和重试策略进行精细控制的实例。您可以通过CassandraTemplate.getCqlOperations()获取CqlOperations。由于该更改,CqlTemplate的依赖注入需要额外的 bean 设置。 -
CqlTemplate现在反映基本 CQL 操作,而不是混合高层次和低层次的 API 调用(例如count(…)和execute(…)),并且精简的方法集与 Spring Framework 的JdbcTemplate和其方便的回调接口保持一致。 -
通过使用
ListenableFuture,在AsyncCqlTemplate和AsyncCassandraTemplate上重新实现异步方法。我们移除了Cancellable和各种异步回调侦听器。ListenableFuture是一种灵活的方法,允许转换为CompletableFuture。
Removed CassandraOperations.selectBySimpleIds()
此方法已被移除,因为它不支持复杂 ID。新引入的查询 DSL 允许映射和复杂 ID 用于单列 ID,如下面的示例所示:
cassandraTemplate.select(Query.query(Criteria.where("id").in(…)), Person.class)
Better names for CassandraRepository
我们重命名了 CassandraRepository 和 TypedIdCassandraRepository,以便将 Spring Data Cassandra 命名与其他 Spring Data 模块对齐:
-
Renamed
CassandraRepositorytoMapIdCassandraRepository -
Renamed
TypedIdCassandraRepositorytoCassandraRepository -
引入
TypedIdCassandraRepository,将CassandraRepository拓展为已弃用的类型,以简化迁移
Removed SD Cassandra ConsistencyLevel and RetryPolicy types in favor of DataStax ConsistencyLevel and RetryPolicy types
Spring Data Cassandra ConsistencyLevel 和 RetryPolicy 已被移除。请使用 DataStax 驱动程序提供的类型。
Spring Data Cassandra 类型限制了 Cassandra 本机驱动程序中提供的和允许的可用功能的使用。结果是,每次驱动程序引入新的功能时,Spring Data Cassandra 的类型都需要更新。
Refactored CQL Specifications to Value Objects and Configurators
尽可能多地说,CQL 规范类型现在是值类型(例如 FieldSpecification, AlterColumnSpecification),并且对象由静态工厂方法构建。这允许不可变的简单值对象。以强制属性(例如表名或键空间名)进行操作的配置器对象(例如 AlterTableSpecification)最初是通过静态工厂方法构建的,并允许进一步配置,直到创建所需状态。
Refactored QueryOptions to be Immutable Objects
QueryOptions 和 WriteOptions 现在是不可变的,并且可以通过生成器创建。接受`QueryOptions` 的方法强制使用非空对象,这些对象可从静态 empty() 工厂方法中获取。以下示例展示了如何使用 QueryOptions.builder():
QueryOptions queryOptions = QueryOptions.builder()
.consistencyLevel(ConsistencyLevel.ANY)
.retryPolicy(FallthroughRetryPolicy.INSTANCE)
.readTimeout(Duration.ofSeconds(10))
.fetchSize(10)
.tracing(true)
.build();