我正在使用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
以及MyResult1
和MyResult2
对其进行了扩展。以前,
MyDocumentClass
不是通用的。然后代码工作正常。但是现在我想根据T
中的MyDocumentClass
选择其他集合名称。那可能吗?如果是,怎么办?如果已经找到a way using MongoTemplates,但这不是我在这里寻找的。
最佳答案
由于Java的Type erasure,您无法执行此操作。泛型仅在编译类型时可见。因此,JVM在运行时无法区分MyDocumentClass<MyResult1>
和MyDocumentClass<MyResult2>
。
但是,您可以将这些实例存储在同一MongoRepository<MyDocumentClass, String>
中。