ANSI 连接

本章介绍如何跨实体使用 ANSI 连接。 从 5.5 版本开始,Couchbase 服务器提供对 ANSI 连接的支持,用于使用字段连接文档。 以前的版本允许索引和查找连接,SDC 仅通过直接通过 SDK 查询来支持这些连接。

跨存储库的实体之间的关系可以是一对一或一对多。 通过定义这种关系,可以获取关联实体的同步视图。

配置

可以通过使用 @N1qlJoin 注释实体的属性引用来获取关联的实体。 前缀 lks 指的是左侧键空间(当前实体),rks 指的是右侧键空间(关联实体)。 @N1qlJoin 注释的必需元素是 on 子句,这是一个布尔表达式,表示左侧 (lks) 和右侧 (rks) 之间的连接条件,可以是字段、常量表达式或任何复杂的 N1QL 表达式。 也可以在连接的注释上指定一个可选的 where 子句,类似地,使用 lks 引用当前实体,使用 rks 引用关联实体。

示例 1. ANSI 连接的注释
@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.IMMEDIATE

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

ANSI 连接提示

使用索引提示

@N1qlJoin 上的 index 元素可用于为 lks(当前实体)索引提供提示,rightIndex 元素可用于为 rks(关联实体)索引提供提示。

哈希连接提示

如果连接类型将是哈希连接,则可以为 rks(关联实体)指定哈希端。 如果关联的实体在构建端,则可以将其指定为 HashSide.BUILD,否则为 HashSide.PROBE

使用键提示

@N1qlJoin 注释上的 keys 元素可用于指定唯一的文档键来限制连接键空间。