7

_class属性を持たないドキュメントでスプリング データ カウチベースを使用する簡単な方法はありますか? sampledataソファベースには、バケツに次のようなものがあります。

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

さて、このドキュメントの構造からJavaオブジェクトへのマッピングを定義する方法はありますか(_class属性が欠落しており、追加できないことに注意してください)。

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

4

4 に答える 4

7

一般に、Spring Data は_class、逆シリアル化するときに何をインスタンス化するかをフィールドに知らせる必要があります。

Spring Data Couchbase_classではtypeKey()AbsctractCouchbaseDataConfiguration.

ただし、デフォルトでは完全修飾クラス名が必要です

それを回避するには、かなり多くの作業が必要になります。

  1. CouchbaseTypeMapperのモデルに従って、独自の を実装する必要がありますDefaultCouchbaseTypeMapper。コンストラクターではsuper(...)、追加の引数を指定する必要があります:のリストですTypeInformationMapper。デフォルトの実装では明示的に提供されていないため、SimpleTypeInformationMapperFQN を配置する a が使用されます。
  2. Map: ConfigurableTypeInformationMapper...を介して特定のクラスを短い名前にエイリアスできるように、構成可能な代替実装があります。
  3. したがって、ConfigurableTypeInformationMapper特定のクラスに必要なエイリアスと a をSimpleTypeInformationMapperリストに追加することで (エイリアスを提供しなかったクラスをシリアル化する場合)、目標を達成できます。
  4. typeMapper内で使用されますがMappingCouchbaseConverter、これも残念ながら拡張する必要があります (typeMapperデフォルトの代わりに your をインスタンス化するためだけです)。
  5. それができたら、再度構成をオーバーライドして、カスタム(メソッド)MappingCouchbaseConverterを使用するカスタムのインスタンスを返します。CouchbaseTypeMappermappingCouchbaseConverter()
于 2016-08-19T11:04:19.367 に答える