1.x から 2.x への移行ガイド

Apache Cassandra 2.0 の Spring Data では、以前のバージョンからアップグレードするときに、一連の重大な変更が導入されます。

  • spring-cql モジュールと spring-data-cassandra モジュールを 1 つのモジュールに統合しました。

  • CqlOperations および CassandraOperations の非同期操作と同期操作を専用のインターフェースとテンプレートに分離しました。

  • JdbcTemplate に合わせて CqlTemplate API を改訂しました。

  • 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 が 1 つのモジュールに統合されました。スタンドアロンの spring-cql モジュールは提供されなくなりました。すべての型が spring-data-cassandra にマージされています。次のリストは、spring-data-cassandra を maven 依存関係に含める方法を示しています。

<dependencies>

  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-cassandra</artifactId>
    <version>4.3.1</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 を次の 3 つの方法で分割します。

  • CassandraTemplate は CqlTemplate ではなくなりましたが、フェッチサイズ、整合性レベル、再試行ポリシーの再利用と詳細な制御を可能にするインスタンスを使用します。CqlOperations から CassandraTemplate.getCqlOperations() まで入手できます。この変更により、CqlTemplate の依存関係の注入には追加の Bean セットアップが必要になります。

  • CqlTemplate は、高レベル API 呼び出しと低レベル API 呼び出し ( count(…) と execute(…) など) を混合するのではなく、基本的な CQL 操作を反映するようになり、削減されたメソッドセットは、便利なコールバックインターフェースを備えた Spring フレームワーク の JdbcTemplate と連携しています。

  • 非同期メソッドは、ListenableFuture を使用して AsyncCqlTemplate および AsyncCassandraTemplate に再実装されます。Cancellable とさまざまな非同期コールバックリスナーを削除しました。ListenableFuture は柔軟なアプローチであり、CompletableFuture への移行が可能です。

CassandraOperations.selectBySimpleIds() を削除しました

このメソッドは複雑な ID をサポートしていないため、削除されました。新しく導入されたクエリ DSL では、次の例に示すように、単一列 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 ConsistencyLevel および RetryPolicy 型を削除し、DataStax ConsistencyLevel および RetryPolicy 型を採用

Spring Data Cassandra ConsistencyLevel および RetryPolicy は削除されました。DataStax ドライバーによって提供される型を使用してください。

Spring Data Cassandra 型では、Cassandra ネイティブドライバーで提供され許可されている利用可能な機能の使用が制限されていました。その結果、Spring Data Cassandra の型は、ドライバーによって新しい機能が導入されるたびに更新する必要がありました。

CQL 仕様を値オブジェクトとコンフィギュレータにリファクタリング

可能な限り、CQL 仕様型は値型 ( FieldSpecificationAlterColumnSpecification など) になり、オブジェクトは静的ファクトリメソッドによって構築されます。これにより、単純な値オブジェクトの不変性が可能になります。必須プロパティ (テーブル名やキースペース名など) を操作するコンフィギュレーターオブジェクト ( AlterTableSpecification など) は、最初に静的ファクトリメソッドを通じて構築され、目的の状態が作成されるまでさらに構成できます。

QueryOptions を不変オブジェクトにリファクタリングしました

QueryOptions と WriteOptions は不変になり、ビルダーを通じて作成できるようになりました。QueryOptions を受け入れるメソッドは、静的 empty() ファクトリメソッドから利用可能な非 null オブジェクトを強制します。次の例は、QueryOptions.builder() の使用方法を示しています。

QueryOptions queryOptions = QueryOptions.builder()
		.consistencyLevel(ConsistencyLevel.ANY)
		.retryPolicy(FallthroughRetryPolicy.INSTANCE)
		.readTimeout(Duration.ofSeconds(10))
		.fetchSize(10)
		.tracing(true)
		.build();

CassandraPersistentProperty を単一列にリファクタリング

この変更は、マッピングモデルを直接操作する場合にのみ影響します。

CassandraPersistentProperty では、以前は複合主キーを使用するために複数の列名をバインドできました。CassandraPersistentProperty の列が 1 つの列に減りました。解決された複合主キーは、MappingContext.getRequiredPersistentEntity(…) を通じてクラスにマップされます。