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

ANSI 连接

本章描述了如何在实体之间使用 ANSI JOIN。 自 5.5 版本起,Couchbase 服务器支持通过字段连接文档的 ANSI JOIN。 早期版本仅支持索引和查找 JOIN,这些功能在 SDC 中只能通过直接通过 SDK 查询来支持。spring-doc.cadn.net.cn

跨仓库的实体之间的关系可以是一对一或多对一。 通过定义此类关系,可以获取关联实体的同步视图。spring-doc.cadn.net.cn

配置

可以通过使用@N1qlJoin注解实体的属性引用来获取关联实体。 前缀lks指代左侧键空间(当前实体),而rks指代右侧键空间(关联实体)。 对于@N1qlJoin注解,必需的元素是on子句,它是一个布尔表达式,表示左侧(lks)和右侧(rks)之间的连接条件,其中可以包含字段、常量表达式或任何复杂的N1QL表达式。 此外,还可以在注解中指定可选的where子句以用于连接,同样使用lks指代当前实体,使用rks指代关联实体。spring-doc.cadn.net.cn

示例 1. ANSI JOIN 的注解
@Document
public class Author {
      @Id
      String id;

      String name;

      @N1qlJoin(on = "lks.name=rks.authorName")
      List<Book> books;

      @N1qlJoin(on = "lks.name=rks.name")
      Address address;
     ...
}

延迟加载

关联实体可以在首次访问属性时进行延迟加载,这在加载实体时可以避免获取超出需求的数据。 要以延迟方式加载关联实体,必须将 @N1qlJoin 注解的元素 fetchType 设置为 FetchType.LAZY。 默认值为 FetchType.IMMEDIATEspring-doc.cadn.net.cn

示例 2. 延迟获取的配置
@N1qlJoin(on = "lks.name=rks.authorName", fetchType = FetchType.LAZY)
List<Book> books;

ANSI 连接提示

使用索引提示

index元素可用于为@N1qlJoin提供lks(当前实体)索引的提示,而rightIndex元素可用于为rks(关联实体)索引提供提示。spring-doc.cadn.net.cn

Hash Join Hint

如果连接类型将是哈希连接,则可以为 rks(关联实体)指定哈希侧。 如果关联实体在构建侧,则可以指定为 HashSide.BUILD,否则为 HashSide.PROBEspring-doc.cadn.net.cn

使用密钥提示

keys element on the @N1qlJoin annotation can be used to specify unique document keys to restrict the join key space.spring-doc.cadn.net.cn