コレクションサポート

Couchbase はスコープとコレクション (英語) をサポートします。このセクションでは、Spring Data Couchbase での使用方法について説明します。

try-cb-spring [GitHub] (英語) サンプルアプリケーションは、Spring Data Couchbase でのスコープとコレクションの使用例です。

Spring Data のコレクションに関する 2021 Couchbase Connect プレゼンテーションは、プレゼンテーションのみ [YouTube] (英語) およびスライドデッキを使ったプレゼンテーション (英語) でご覧いただけます。

要件

  • Couchbase サーバー 7.0 以降。

  • Spring Data Couchbase 4.3.1 以上。

はじめにと設定

範囲と収集の仕様

スコープとコレクションを指定するメカニズムはいくつかあり、これらを組み合わせたり、あるメカニズムが別のメカニズムをオーバーライドしたりできます。まず、スコープとコレクションの定義をいくつか説明します。スコープが指定されていない場合は、デフォルトのスコープが使用されることを示し、同様に、コレクションが指定されていない場合は、デフォルトのコレクションが使用されることを示します。有効なスコープとコレクションの組み合わせは 3 つだけです。(1) デフォルトのスコープとデフォルトのコレクション。(2) デフォルトのスコープとデフォルト以外のコレクション。(3) デフォルト以外のスコープとデフォルト以外のコレクション。デフォルト以外のスコープにはデフォルトのコレクションが含まれず、デフォルトのコレクションも作成できないため、デフォルト以外のスコープとデフォルトのコレクションを持つことはできません。

スコープは構成で指定できます。

@Configuration
static class Config extends AbstractCouchbaseConfiguration {

    // Usual Setup
    @Override public String getConnectionString() { /* ... */ }

    // optionally specify the scope in the Configuration
    @Override
    protected String getScopeName() {
        return "myScope"; // or a variable etc.;
    }

}

スコープとコレクションは、エンティティクラスとリポジトリのアノテーションとして指定できます。

@Document
@Scope("travel")
@Collection("airport")
public class Airport {...
@Scope("travel")
@Collection("airport")
public interface AirportRepository extends CouchbaseRepository<Airport, String> ...

スコープとコレクションは、inScope(scopeName) および inCollection(collectionName) Fluent API を使用してテンプレートに指定できます。

List<Airport> airports = template.findByQuery(Airport.class).inScope("archived").all()

withScope(scopeName) および withCollection(collectionName) API を使用して DynamicProxyable を継承するリポジトリでスコープとコレクションを指定できます。

public interface AirportRepository extends CouchbaseRepository<Airport, String>, DynamicProxyable<AirportRepository>{...}
...
List<Airport> airports = airportRepository.withScope("archived").findByName(iata);
優先順位は次のとおりです。
  1. テンプレート fluent API の inScope()/inCollection()

  2. テンプレート / リポジトリオブジェクトの withScope()/withCollection()

  3. リポジトリメソッドのアノテーション

  4. リポジトリインターフェースのアノテーション

  5. エンティティオブジェクトのアノテーション

  6. getScope() 構成