Итак, моя проблема связана с тем, как Spring обрабатывает наследование, когда дело доходит до полей.
У меня четыре класса
@Document(collection = "A")
public class A {
@Id
id;
@Field
B data;
}
public class B {
Type type
}
public class C extends B {
String cField;
public C() {
super(Type.C);
}
}
public class D extends B {
Integer dField;
public D() {
super(Type.D);
}
}
Я могу хранить данные в mongodb, используя эту схему и это выглядит примерно так:
{
"_id" : ObjectId("5f291f861020d19a3db05123"),
"data" : {
"cField" : "abcd",
"type" : "C",
"_class" : "com.example.C"
},
"_class" : "com.example.A"
}
{
"_id" : ObjectId("5f291f861020d19a3db05124"),
"data" : {
"dField" : NumberInt(30),
"type" : "D",
"_class" : "com.example.D"
},
"_class" : "com.example.A"
}
Теперь, когда я пытаюсь выполнить findAll в репозитории, он не выполняет преобразование в дочерний класс, а просто возвращает экземпляр B. Какие изменения мне нужно внести чтобы я мог получить правильный дочерний объект при получении из db?