【发布时间】:2020-07-22 16:47:40
【问题描述】:
我正在尝试将包含 @DBRef 的对象保存并加载到另一个恰好是子类类型的对象,并且 Spring Data MongoDB 将该字段加载为 null。
class Person {
@Id
private long id;
@DBRef
private Food food;
}
class Food {
@Id
private long id;
}
class Burger extends Food {}
我正在单独保存对象:
Burger burger = new Burger();
foodRepository.save(burger);
Person person = new Person();
person.setFood(burger);
personRepository.save(person);
发生的情况是 burger 对象保存在 food 集合中,在 MongoDB 中 _class 值为 Burger ,而 Person 文档中的 $ref 指向 burger 而不是 @987654329 @。
person收藏:
{
"_id" : NumberLong(1),
"food" : {
"$ref" : "burger",
"$id" : NumberLong(2)
},
"_class" : "Person"
}
food收藏:
{
"_id" : NumberLong(2),
"_class" : "Burger"
}
如果我使用findAll() 或findById() 加载对象,则food 字段为空。但是,如果我将 findByFood() 与 burger 对象一起使用,则会返回 person 对象。我在这里没有正确理解什么?
personRepository.findById(1L).getFood(); // null
personRepository.findByFood(burger); // Person object
【问题讨论】:
标签: mongodb spring-data-mongodb