2017-10-05 231 views
0

我正在使用Spring Data Mongo将我的程序与MongoDB实例进行接口。我在Mongo内部存储类似于以下内容的类型。在Spring Data中使用泛型对象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,但我没有找到任何东西。

其他一些模板 Spring的类提供这种支持。以RestTemplate为例。有很多exchange方法的签名使用ParameterizedTypeReference<T>来实现类似于我搜索MongoTemplate(例如this)的内容。

在我看来,在MongoTemplate也有类似的东西是有用的。

有没有办法在提取过程中处理泛型类型?

谢谢。

+0

如果没有一个''结合'T'某种类型的一个亚型,有一个在这里甚至使用泛型类型是没有意义的。你可以坚持'List '。通常你不清楚你在问什么:你究竟想要达到什么目标?什么文件看起来像你想查询?你会得到什么结果?你期望结果会有什么不同? –

+0

@OliverGierke我更新了我的问题。如果问题以任何方式伤害你,我表示歉意。这不是我的意图。 –

回答

2

我不认为有一种方法可以用Spring Data MongoDB来支持泛型文档。

可以清楚地由奥利弗·基尔克在他的评论中解释说:

如果没有A<T>亚型结合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

相关问题