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 Join Hints
使用索引提示
index
元素在 @N1qlJoin
上可以用来提供 lks
(当前实体)索引的提示,而 rightIndex
元素可以用来提供 rks
(关联实体)索引。
Hash Join Hint
如果连接类型将是哈希连接,则可以为 rks
(关联实体)指定哈希侧。如果关联实体位于构建侧,则可以指定为 HashSide.BUILD
,否则指定为 HashSide.PROBE
。
使用键提示
keys
元素在 @N1qlJoin
注解中可用于指定唯一的文档键,以限制连接键的空间。