2017-09-20 5 views
0

Spring Data CouchbaseでN1QLベースのクエリを作成しようとしています。SpringデータCouchbase#n1ql.fieldsクエリ

@Query("#{#n1ql.fields} WHERE #{#n1ql.filter}") 
List<User> findAllByFields(String fields); 

そして、次のように私はこのクエリを呼んでいる:私はこのエラーを取得してい

this.userRepository.findAllByFields("SELECT firstName FROM default"); 

をドキュメントが

#n1ql.fields will be replaced by the list of fields (eg. for a SELECT clause) necessary to reconstruct the entity.

私のリポジトリの実装はこの1つであると言います

Caused by: org.springframework.data.couchbase.core.CouchbaseQueryExecutionException: Unable to execute query due to the following n1ql errors: {"msg":"syntax error - at AS","code":3000}

少し後研究の、私もしようと試み:このクエリでは

@Query("SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter}") 

を、私はエラーを取得しない、私はすべて保存されたドキュメントが、私のクエリが取得しようとすると、他のフィールドは、nullに設定されている唯一のIDを取得しますfirstNameフィールド

this.userRepository.findAllByFields("firstName"); 

誰でもこのようなクエリを実行する方法を知っていますか?

ありがとうございます。

答えて

0

あなたはこの概念を誤解しています。ドキュメントをもっと長くして、より多くの例を見ることをお勧めします。私はあなたが達成しようとしていることを正確にはわかりませんが、私はいくつかの例を投げます。

これは基本的に@Queryで定義されたのparamプレースホルダが存在しないので注意してくださいfindAllUsers()がパラメータを取らないSELECT meta().id,_cas,* FROM bucket WHERE type='com.example.User'

生成するすべてのユーザー(自分格納されたデータのすべてを持つ)

@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter}") 
List<User> findAllUsers(); 

検索上記。

@Query("#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND firstName like $1") 
List<User> findByFirstNameLike(String keyword); 

などのfirstNameのは、これは、上記のクエリのようなものを生成するが、PARAMプレースホルダがあるので、条件firstName like

お知らせこの方法は、キーワードを取るところ余分とするすべてのユーザーを探します定義された$1と定義される。


それはあなたがユーザー(複数可)のすべてのデータをフェッチしたくない場合は今、あなたがいるフィールドを指定する必要があります

#{#n1ql.selectEntity} WHERE #{#n1ql.filter} AND test = $1

is equivalent to

SELECT #{#n1ql.fields} FROM #{#n1ql.bucket} WHERE #{#n1ql.filter} AND test = $1


言うドキュメントのお知らせ選択し、詳細は以下のリンクを読んで

How to fetch a field from document using n1ql with spring-data-couchbase

https://docs.spring.io/spring-data/couchbase/docs/2.2.4.RELEASE/reference/html/#_dto_projections

+0

あなたが投稿したドキュメントは、私を大きく助けました。最後に私はSpring Dataがそれをサポートしていないことを理解しました。唯一の選択肢は予測を使用することです。ありがとうございました。 – Elena

関連する問題