2017-10-05 6 views
0

SpringデータMongoを使用してプログラムをMongoDBのインスタンスとインターフェースしています。私はMongoの中に以下のようなタイプを保存します。一般的なオブジェクトをSpringデータで使用するMongo

@Document 
class A<T> { 
    @Id String id; 
    Instant createdAt; 
    List<T> values; 
} 

ご覧のとおり、ジェネリックタイプTは、メイン文書内のプロパティで使用されています。私はクエリを使ってそのようなドキュメントを抽出する際にいくつか問題があります。私は現在、次のような文を使用しています。

List<A> list = 
    mongoTemplate.find(Query.query(Criteria.where("id").in("id1", "id2"), 
         A.class, 
         "collectionName"); 

残念ながら、上記のコードでは一般的なフィールドはサポートされていません。私は文書とMongoTemplateのコードを見ましたが、何も見つかりませんでした。

その他テンプレートのクラスは、このサポートを提供しています。たとえば、RestTemplateとします。 MongoTemplate(たとえばthis)のようなものを実現するためにParameterizedTypeReference<T>を使用するexchangeメソッドの多くのシグネチャがあります。

私の意見では、MongoTemplateにも同様のものがあると便利です。

抽出プロセス中にジェネリックタイプを処理する方法はありますか?

ありがとうございました。

+0

いくつかのタイプに 'T'を結合し、 '' のサブタイプでないとは、ここでもジェネリック型を使用するにはポイントがありません。あなたは 'List 'に固執することができます。一般に、あなたが求めているものはかなり不明です。実際に何を達成したいのですか?あなたが照会したいと思われる文書はどのように見えますか?あなたはどのような結果を得ていますか、結果についてはどういうことを期待していますか? –

+0

@OliverGierke私の質問が更新されました。質問があなたに何かを傷つけるなら、私はお詫び申し上げます。私の意図ではありませんでした。 –

答えて

2

Spring Data MongoDBで一般的なドキュメントをサポートする方法はないと思います。

は明らかなように、彼のコメントでオリバーギールケによって説明:

いくつかのタイプにTを結合しA<T>のサブタイプでなければ、ここでもジェネリック型を使用するにはポイントがありません。あなたはList<Object>にこだわることができます。

valuesタイプごとにAのサブタイプを作成するのが最もよい方法です。このような何か:

@Document 
public class StringA extends A<String> { ... } 

@Document 
public class IntegerA extends A<Integer> { ... } 
+0

"Spring Data MongoDBで一般的なドキュメントをサポートする方法はないと思います。"広義の声明です。特に "一般的な文書をサポートする"ことが何を意味するのかを知ることさえできません。元の質問への私のコメントを参照してください。 –

+0

@OliverGierke私の答えを更新;) – davioooh

関連する問題