2017-02-07 16 views
1

私は間違った道を完全に下っていますか? これは機能しますか?春データCouchbase findByIdは常にnullを返します

私はブール

例えばに基づいて選択を制限し、クエリを構築しようとしていますfindByIdAndFieldIsTrue(id)

これは常に値を返しません。私がこれを狭めてやればfindById(id)私はまだ奇妙に見える結果は得られません。私はメソッド名にId &フィールドの多くの置換を試みましたが、何もしませんでした。

Entity { 
    @Id 
    String id 
    boolean field 
} 

interface EntityRepository BaseRepository, Repository { 
    findByIdAndFieldIsTrue(id) 
} 

私は多分findOne方法を妨害されたBaseRepository考えず試したが、運。

アップデート:私は、クエリ

{"statement":"SELECT META(`mybucket`).id AS _ID, META(`mybucket`).cas AS _CAS, `mybucket`.* FROM `mybucket` WHERE (`id` = \"entity::9627ff50-531d-4191-a9dc-07b48ba77fe9\") AND `_class` = \"com.myrepo.repository.api.Entity\"","scan_consistency":"statement_plus"} 

答えて

2

編集得ることができます

の答えで提案されているロガーを追加した後:あなたはIDによって選択するためのUSE KEY構文を使用するN1QL力を...その意志は回避策が最も簡単な経路であるように見える(下記参照)

これは@Idフィールドのクエリ導出の見落としであると思います。 Couchbaseでは、そのフィールドはドキュメントのキーにマップされ、ドキュメントの本体には含まれていないので、N1QLクエリはこれを考慮する必要があります。

クエリ生成のログを有効にできますか?生成されたN1QLをDEBUGモードでログに記録するAbstractN1qlBasedQuery.classロガーがあります。クエリがどのように見えるかを確認し、@Idフィールドの特別なステップを実行する必要があることを確認することができます。

デシリアライゼーションが複雑な場合でもパフォーマンスは向上しませんが、 findOneを使用して、フィールドを確認してください。

+0

私は自分の答えをクエリで更新しましたが、メタの詳細を変更しましたが、あなたが探しているものには影響しません。 findOneを使用して、現在の私の現在の仕事である結果をフィルタリングする場合は –

+1

うん、 "_ID"ではなく "id"にwhere句を生成します...おそらく '@Field(" _ ID ")'アノテーションを使用すると、そのコーナーケース(idフィールドは通常他のフィールドから独立して管理されますが) –

+0

実際には '_ID'を使用してwhere句が生成されますが、まだ結果は返されません。私はcouchbase管理コンソールで既知の既存のIDを持つこのクエリで試しました 'SELECT * FROM myBucket WHERE _ID =" product :: 0919893e-9411-4c41-8403-6753d7e1910f "'結果はありません –

関連する問題