将通用对象与 Spring Data Mongo 一起使用

ric*_*din 4 java generics spring spring-data-mongodb

我正在使用 Spring Data Mongo 将我的程序与 MongoDB 实例连接起来。我在 Mongo 内部存储了类似于以下的类型。

@Document
class A<T> {
    @Id String id;
    Instant createdAt;
    List<T> values;
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,泛型类型T用于主文档内的属性中。我在使用查询提取此类文档时遇到一些问题。我目前正在使用类似于以下语句的内容。

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

不幸的是,上面的代码不提供对通用字段的任何支持。我查看了文档和代码MongoTemplate,但没有找到任何东西。

Spring 的其他一些模板类提供了这种支持。RestTemplate个例子。有许多exchange方法的签名使用 aParameterizedTypeReference<T>来实现与我正在搜索的类似的东西MongoTemplate(例如this )。

在我看来,在MongoTemplate.

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

谢谢。

dav*_*ooh 5

我认为没有办法使用 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> { ... }
Run Code Online (Sandbox Code Playgroud)