0

N1QL クエリ構文を使用して値以外のものを挿入しようとしていますが、@Query機能しません。

純粋な N1QL クエリは次のとおりです。

SELECT * from `my-bucket` WHERE _class = 'my.package.MyModel' AND myParam = 'myValue'

Java に値を挿入し、正しい結果を得ることができました。

// In my repository
@Query("#{#n1ql.selectEntity} WHERE myParam = $1 AND #{#n1ql.filter}")
Collection<MyModel> myCustomSearch(String value);
// In my business code
myRepository.myCustomSearch("myValue");

ただし、他のもの (パラメーターなど)を注入することはできません。これは機能しません:

// In my repository
@Query("#{#n1ql.selectEntity} WHERE $1 = 'myValue' AND #{#n1ql.filter}")
Collection<MyModel> myCustomSearch(String param);
// In my business code
myRepository.myCustomSearch("myParam");

純粋な N1QL クエリでは、通常、値は一重引用符 ('') で囲まれており、それを注入するときは必要ないことを考慮すると、spring-data-couchbase は注入された要素を常に一重引用符または二重引用符でラップします (したがって、私のクエリに変換されます

SELECT * from `my-bucket` WHERE _class = 'my.package.MyModel' AND 'myParam' = 'myValue'

これは、Couchbase が結果を返さない理由を説明しています)。

私は何か見落としてますか?それ以外の場合、spring-data-couchbase からのクォート インジェクションをバイパスする方法はありますか?

単純に a を使用してそれcom.couchbase.client.java.Bucketを呼び出すことができることは承知しqueryていますが、これでは常に POJO を操作し、JSON 操作を非表示にするという spring-data-couchbase の要点がすべて失われます。

どんな助けにも感謝します!

4

2 に答える 2