2016-08-09 7 views
1

_class属性を持たないドキュメントでspringデータcouchbaseを使用する簡単な方法はありますか?私は私のsampledataバケツにこのような何かを持っているのCouchbaseで :_class属性なしでcouchbaseでspringデータを使用する方法

{ 
    "username" : "alice", 
    "created" : 1473292800000, 
    "data" : { "a": 1, "b" : "2"}, 
    "type" : "mydata" 
} 

は今、Javaオブジェクトへの文書のこのような構造からマッピングを定義する方法はあります(_class属性が欠落していると追加することができないことに注意してください)その逆もあり、私は春のcouchbaseデータからすべての(またはほとんどの)自動特徴を得ることができますか?

次のようなもの: typeフィールドの値が "mydata"の場合は、クラスMyData.javaを使用します。 AND _class = "mydata"を生成されたクエリに自動的に追加する代わりに、検索が実行されると、AND type = "mydata"が追加されます。

答えて

3

一般的に、春のデータには、デシリアライズ時に何をインスタンス化するかを知るために、_classフィールドが必要です。

AbsctractCouchbaseDataConfigurationtypeKey()メソッドをオーバーライドすることによって、Spring Data Couchbaseでは、_classとは異なるフィールド名を使用するのは簡単です。

は、しかし、それはまだかなり多くの作業が必要になりますその周りの取得デフォルト

によってそこに完全修飾クラス名を期待しています:

  1. あなたがあなた自身を実装する必要がありますCouchbaseTypeMapperDefaultCouchbaseTypeMapperのモデルに従った。 super(...)コンストラクタでは、追加の引数を提供する必要があります:TypeInformationMapperのリスト。デフォルトの実装では明示的に実装されていないため、FQNを配置するのはSimpleTypeInformationMapperです。あなたが特定のクラス+それの後SimpleTypeInformationMapper中に必要別名でConfigurableTypeInformationMapperを入れて... 3.SoをConfigurableTypeInformationMapper
  2. あなたはMap経由で短い名前に特定のクラスを別名設定できるように構成され、代替の実装がありますリスト(あなたがエイリアスを提供しなかったクラスをシリアライズした場合)、あなたは目標を達成することができます。
  3. typeMapperは、あなたも自分のtypeMapperの代わりに、デフォルトをインスタンス化する(残念ながら拡張する必要がありますMappingCouchbaseConverter、内で使用される。
  4. あなたがもう一度あなたのカスタムのインスタンスを返すように設定を上書き、というたら。カスタムCouchbaseTypeMappermappingCouchbaseConverter()メソッド)を使用して、あなたのCouchbaseの設定クラスで
+0

Simon、 FQNがデフォルトで設定されていると言ったとき。それはオーバーライドできることを意味しますか?私はあなたがお勧めしたことを試したので、データベースに残っている間は動作しましたが、検索中(例えばfindByField(...))、typeKeyフィルタは対象クラスのFQNを使用しています。カスタムコンバータ。 – Zava

+1

Springのクエリメソッドを使用するときに完全修飾クラス名の代わりにエイリアスを使用できないことを確認できますか?この結論はN1qlUtils#createWhereFilterForEntityを参照してください。 – Happy

+2

現時点ではこれは不可能であり、少なくとも正式にはサポートされていません。 –

0

あなただけの持っている必要がありMappingCouchbaseConverter

@Override 
public String typeKey() { 
    return "type"; 
} 

残念ながら、クエリ導出(n1ql)の場合、_classまたは型はまだクラス名を使用しています.Tried spring couch 2.2.6およびここではマイナスポイントです。 @Simon、あなたは何かが変わったことを知っていますか、次のリリースでカスタム_class/typeの値を持つ可能性をサポートしていますか?

関連する問題