我使用Spring Data Mongo将我的程序与MongoDB实例连接起来。我在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
的代码,但我没有找到任何内容。
其他一些 templates 类的Spring提供了这种支持。以RestTemplate
为例。 exchange
方法有许多签名使用ParameterizedTypeReference<T>
来实现类似于我搜索MongoTemplate
的内容(例如this)。
在我看来,在MongoTemplate
中也有类似的东西。
有没有办法在提取过程中处理泛型类型?
感谢。
答案 0 :(得分:3)
我认为有一种方法可以使用Spring Data MongoDB支持通用文档。
正如Oliver Gierke在评论中清楚解释的那样:
如果没有
A<T>
的子类型将T
绑定到某种类型,那么即使在这里使用泛型类型也没有意义。你可以坚持List<Object>
。
实现所需要的最佳方法是为每个A
类型创建一个values
的子类型。像这样:
@Document
public class StringA extends A<String> { ... }
@Document
public class IntegerA extends A<Integer> { ... }