我正在使用Spring Boot 1.5.6。特别是,我使用Spring Boot Data MongoDB来连接MongoDB。

假设我有这个MongoRepository

public interface MyRepository1 extends MongoRepository<MyDocumentClass<MyResult1>, String> {
}


还有第二个

public interface MyRepository2 extends MongoRepository<MyDocumentClass<MyResult2>, String> {
}


那我有文件

@Document(collection = "collectionName")
public class MyDocumentClass<T extends AbstractResult> {

    private String myString;
    private int myInt;
    private List<T> results;

    public MyDocumentClass(String myString, int myInt, List<T> results) {
        this.myString = myString;
        this.myInt = myInt;
        this.results = results;
    }

    public String getMyString() {
        return myString;
    }

    public int getMyInt() {
        return myInt;
    }

    public List<T> getResults() {
        return results;
    }
}


当然,AbstractResult以及MyResult1MyResult2对其进行了扩展。

以前,MyDocumentClass不是通用的。然后代码工作正常。但是现在我想根据T中的MyDocumentClass选择其他集合名称。那可能吗?如果是,怎么办?

如果已经找到a way using MongoTemplates,但这不是我在这里寻找的。

最佳答案

由于Java的Type erasure,您无法执行此操作。泛型仅在编译类型时可见。因此,JVM在运行时无法区分MyDocumentClass<MyResult1>MyDocumentClass<MyResult2>

但是,您可以将这些实例存储在同一MongoRepository<MyDocumentClass, String>中。

09-05 02:42