ANSI に参加
この章では、エンティティ間で ANSI 結合を使用する方法について説明します。5.5 バージョン以降、Couchbase サーバーは、フィールドを使用してドキュメントを結合するための ANSI 結合のサポートを提供します。以前のバージョンではインデックス結合とルックアップ結合が可能でしたが、SDC では SDK を介して直接クエリすることによってのみサポートされていました。
リポジトリ間のエンティティ間の関連は、1 対 1 または 1 対多の場合があります。このような関連を定義することにより、関連するエンティティの同期されたビューを取得できます。
構成
関連するエンティティは、エンティティのプロパティ参照に @N1qlJoin のアノテーションを付けることでフェッチできます。接頭辞 lks は左側のキースペース (現在のエンティティ) を指し、rks は右側のキースペース (関連エンティティ) を指します。@N1qlJoin アノテーションに必要な要素は on 句です。これは、左側 (lks) と右側 (rks) の間の結合条件を表すブール式で、フィールド、定数式、任意の複雑な N1QL 式を使用できます。結合のアノテーションにオプションの where 句を指定することもできます。同様に、lks を使用して現在のエンティティを参照し、rks を使用して関連するエンティティを参照します。
@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 です。
@N1qlJoin(on = "lks.name=rks.authorName", fetchType = FetchType.LAZY)
List<Book> books;