2017-12-19 12 views
0

特定のスキーマを持たないレガシーCouchbaseバケットからデータを取得する必要があります。 Couchbase Javaクライアントからcom.couchbase.client.java.document.StringDocumentという名前でマップすることができます。私はこの直接Javaクライアントを使用して行うことができます。Spring Data Couchbaseと外部ドキュメント(依存関係から)をマッピングすることは可能ですか?

bucket.get(key, StringDocument.class)

をしかし、どのように、私はorg.springframework.data.repository.CrudRepositoryを使用して、このStringDocumentをマッピングすることができますか?

このようなインターフェイスinterface UserRepository extends CrudRepository<StringDocument, String>を作成することはできません。なぜなら、Spring Data Couchbaseは@Documentアノテーションと@Idアノテーションを必要とするからです。

すべてのエンティティに@Document注釈を付ける必要があります。また、エンティティの各フィールドに@Fieldアノテーションを注釈する必要があります。これは厳密に言えばオプションですが、エッジケースを減らすのに役立ち、エンティティの意図と設計を明確に示します。

常に存在する必要がある特別な@注釈アノテーションもあります。ベストプラクティスは、プロパティIDにも名前を付けることです。

バケットを直接使用するか、自分の類似のエンティティを作成するか、別の解決策がありますか?

次のバージョンのspring-boot-startter-data-couchbase:1.5.9.RELEASEを使用します。

答えて

1

(逆シリアル化の目的のために_class属性を注入し、それはさえで開始するspring-data-couchbaseで保存されませんでした。)そのわずかStringDocument場合、私はちょうどそれを取得するためにバケツを使用すると思います。

リポジトリ(私が定義している他のリポジトリについて、StringDocumentが同じバケットにマップされている)がCouchbaseRepositoryと定義されている場合、リポジトリからバケット自体にアクセスできるようになりますメソッドはrepository.getCouchbaseOperations().getCouchbaseBucket()です。または、次のように試してみてくださいrepository.getCouchbaseOperations().findById("id", StringDocument.class)

+0

ありがとうございます!より良い回答が得られない場合は、私は受け入れられたとしてあなたの印をつけるでしょう:) – solomkinmv

関連する問題