跳到主要内容

ANSI 连接

ChatGPT-4o-mini 中英对照 ANSI Joins

本章描述了如何在实体之间使用 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;
...
}
java

延迟获取

关联实体可以在首次访问属性时延迟加载,这样可以避免在加载实体时获取超过所需的数据。要延迟加载关联实体,必须将 @N1qlJoin 注解的元素 fetchType 设置为 FetchType.LAZY。默认值为 FetchType.IMMEDIATE

示例 2. 懒加载配置

@N1qlJoin(on = "lks.name=rks.authorName", fetchType = FetchType.LAZY)
List<Book> books;
java

ANSI Join Hints

使用索引提示

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

Hash Join Hint

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

使用键提示

keys 元素在 @N1qlJoin 注解中可用于指定唯一的文档键,以限制连接键的空间。