現在、これはリポジトリからはできません。Spring Data Hopper はProjection
それを可能にする機能を導入しましたが、Couchbase ストアの実装はまだそれをカバーしていません。
CouchbaseTemplate
メソッドを持つ に近いものがありfindByN1QLProjection
ますが、クエリ専用の DTO が必要です。例えば:
SELECT name, lastName FROM #{#n1ql.bucket} WHERE code = $1 AND #{#n1ql.filter}
これは (純粋な N1QL で) 以下と同等です。
SELECT name, lastName FROM bucketThatBacksRepository WHERE code = $1 AND _class = "com.example.Person"
を使用するには、次のクラスが必要ですfindByN1QLProjection
。
public class PersonNameDTO {
private final String name;
private final String lastName;
//constructor and maybe getters/setters needed but omitted here
}
そして、それはList<PersonNameDTO>
. これは、具体的な DTO クラスではなくインターフェイスを中心に設計されていることを除いて、私が話していたプロジェクション機能と大きく異なるわけではないことに注意してください。
#{#n1ql.selectEntity}
SpEL の目的は、特定のエンティティのすべてのフィールドをカバーする大きな SELECT 句を持つことであるため、SpELを使用しないでください(ここでは SELECT 句を制限する必要があります)。
また、リポジトリに関連付けられた正しいバケットを含む FROM 部分もカバーしますが、#{#n1ql.bucket}
その部分 (およびその部分のみ) もカバーします...