從 1.x 遷移至 2.x 的遷移指南

Spring Data for Apache Cassandra 2.0 在從較早版本升級時,引入了一系列重大變更

  • 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),並且物件由靜態 factory 方法建構。這允許簡單值物件的不可變性。在強制屬性(例如表名或鍵空間名)上操作的配置器物件(例如 AlterTableSpecification)最初通過靜態 factory 方法建構,並允許進一步配置,直到建立所需的狀態。

QueryOptions 重構為不可變物件

QueryOptionsWriteOptions 現在是不可變的,並且可以通過建構器建立。接受 QueryOptions 的方法強制執行非 Null 物件,這些物件可從靜態 empty() factory 方法取得。以下範例顯示如何使用 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(…) 對應到一個類別。