此版本仍处于开发阶段,尚未被视为稳定版本。如需使用最新稳定版本,请采用 Spring Data Couchbase 6.0.4spring-doc.cadn.net.cn

集合支持

Couchbase 支持 作用域和集合。本节文档介绍了如何在 Spring Data Couchbase 中使用它。spring-doc.cadn.net.cn

The try-cb-spring 示例应用程序是使用 Spring Data Couchbase 中的作用域和集合的实用示例。spring-doc.cadn.net.cn

关于 Spring Data 中集合的 2021 Couchbase Connect 演示文稿,可在 仅演示带幻灯片集的演示 处找到spring-doc.cadn.net.cn

要求

入门与配置

范围和集合规范

指定作用域和集合有几种机制,这些机制可以组合使用,或者一种机制可以覆盖另一种。 首先定义一下作用域和集合。未指定的作用域表示将使用默认作用域,同样,未指定的集合表示将使用默认集合。 只有三种作用域和集合的组合是有效的:(1) 默认作用域和默认集合;(2) 默认作用域和非默认集合;以及 (3) 非默认作用域和非默认集合。无法同时拥有非默认作用域和默认集合,因为非默认作用域不包含默认集合,也无法创建这样的集合。spring-doc.cadn.net.cn

作用域可以在配置中指定:spring-doc.cadn.net.cn

@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.;
    }

}

作用域和集合可以指定为实体类和仓库上的注解:spring-doc.cadn.net.cn

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

作用域和集合可以通过在模板上使用 inScope(scopeName) 和 inCollection(collectionName) 流畅 API 来指定:spring-doc.cadn.net.cn

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

可以使用 withScope(scopeName) 和 withCollection(collectionName) API,为继承自 DynamicProxyable 的仓库指定作用域(Scopes)和集合(Collections):spring-doc.cadn.net.cn

public interface AirportRepository extends CouchbaseRepository<Airport, String>, DynamicProxyable<AirportRepository>{...}
...
List<Airport> airports = airportRepository.withScope("archived").findByName(iata);
优先级的顺序是:
  1. 模板流畅 API 的 inScope()/inCollection() 方法spring-doc.cadn.net.cn

  2. 模板/仓库对象的 withScope()/withCollection() 方法spring-doc.cadn.net.cn

  3. 仓库方法的注解spring-doc.cadn.net.cn

  4. 存储库接口的注解spring-doc.cadn.net.cn

  5. 实体对象的注解spring-doc.cadn.net.cn

  6. 配置的作用域spring-doc.cadn.net.cn