ANSI に参加

この章では、エンティティ間で ANSI 結合を使用する方法について説明します。5.5 バージョン以降、Couchbase サーバーは、フィールドを使用してドキュメントを結合するための ANSI 結合のサポートを提供します。以前のバージョンではインデックス結合とルックアップ結合が可能でしたが、SDC では SDK を介して直接クエリすることによってのみサポートされていました。

リポジトリ間のエンティティ間の関連は、1 対 1 または 1 対多の場合があります。このような関連を定義することにより、関連するエンティティの同期されたビューを取得できます。

構成

関連するエンティティは、エンティティのプロパティ参照に @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 要素を使用して、一意のドキュメントキーを指定し、結合キースペースを制限できます。