[英]Spring Boot - MongoDB - Inheritance
我在繼承和 mongodbrepositories 方面遇到了一些奇怪的事情。
我有以下幾點:
`
@Document
public class Base {
public String fieldA;
}
public class Derived extends Base {
public String fieldB;
}
public interface DerivedRepository extends MongoRepository<Base, String> {
List<Derived> findByFieldA(String fieldA);
}
`
插入時我得到
在集合中插入包含字段的 DBObject: [_class, _id, fieldA, fieldB ]: base
當我在存儲庫上執行 findByFieldA('some value') 時,我得到以下信息:
使用查詢查找:{“fieldA”:“某些值”} 字段:null 用於類:類 派生於集合:派生
知道這里發生了什么嗎? 我該如何解決這個問題,要么將其保存到正確的派生集合中,要么通過從基礎集合中查詢。
問候,
首先,我將Derived
類作為文檔,因為父類將在許多實現之間共享。
public class Base {
public String fieldA;
}
@Document
public class Derived extends Base {
public String fieldB;
@Override
public String toString() {
return "{fieldA: " + getFieldA() + ", fieldB: " + fieldB + "}";
}
}
其次,將文檔類型(標記為@Document 的類)的存儲庫規范更改為:
public interface DerivedRepository extends MongoRepository<Derived, String> {
List<Derived> findByFieldA(String fieldA);
List<Derived> findByFieldB(String fieldB);
}
我添加了額外的方法findByFieldB(String fieldB)
來解釋更多。
通過這些更改,您應該能夠使用fieldA
或fieldB
進行查詢,如下所示:
public class SpringBootMongoApplication {
@Autowired
private DerivedRepository derivedRepository;
public void testMethod() throws Exception {
Derived derived1 = new Derived();
derived1.setFieldB("fieldB1");
derived1.setFieldA("fieldA1");
Derived derived2 = new Derived();
derived2.setFieldB("fieldB2");
derived2.setFieldA("fieldA2");
this.derivedRepository.save(Arrays.asList(derived1, derived2));
List<Derived> deriveds = this.derivedRepository.findByFieldA("fieldA1");
System.out.println(deriveds);
List<Derived> deriveds1 = this.derivedRepository.findByFieldB("fieldB2");
System.out.println(deriveds1);
}
}
輸出應該是:
[{fieldA: fieldA1, fieldB: fieldB1}]
[{fieldA: fieldA2, fieldB: fieldB2}]
您還可以使用 mongo 查詢來驗證持久化的對象及其類型,如下所示:
我創建了一個 Spring Boot 示例應用程序,您可以在Github 中找到它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.