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 元素可用於指定唯一的文件鍵來限制連線鍵空間。