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 元素可用於指定唯一文件索引鍵,以限制連接鍵空間。