Поддержка Spring Data MongoDB для наследования вложенного объекта - PullRequest
0 голосов
/ 04 августа 2020

Итак, моя проблема связана с тем, как 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?

...