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;