在Spring Data中使用泛型对象Mongo
我正在使用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
也有类似的东西是有用的。
有没有办法在提取过程中处理泛型类型?
谢谢。
我不认为有一种方法可以用Spring Data MongoDB来支持泛型文档。
可以清楚地由奥利弗·基尔克在他的评论中解释说:
如果没有
A<T>
亚型结合T
某种类型的,有一个在这里甚至使用泛型类型是没有意义的。你可以坚持到List<Object>
。
实现你所需要的最好方法是为每个values
类型创建一个子类型A
。事情是这样的:
@Document
public class StringA extends A<String> { ... }
@Document
public class IntegerA extends A<Integer> { ... }
“我不认为有一种方法可以支持Spring Data MongoDB的通用文档。”是一个广泛的声明。特别是鉴于甚至不知道“支持通用文档”是什么意思。看到我对原始问题的评论。 –
@OliverGierke我更新了我的答案;) – davioooh
如果没有一个''结合'T'某种类型的一个亚型,有一个在这里甚至使用泛型类型是没有意义的。你可以坚持'List
@OliverGierke我更新了我的问题。如果问题以任何方式伤害你,我表示歉意。这不是我的意图。 –