使用SpringBoot更新MongoDB中包含多态集的对象

时间:2017-09-11 10:23:35

标签: mongodb

我有一个" Fonction" class保存在我的Mongo数据库中,其中包含一组扩展的对象" ItemAccesFonction" class:

@Document
public class Fonction {

    @Id
    private String _id;
    @Indexed
    private String name;
    private Set<ItemAccesFonction> access;

    public Fonction() {
    }

    public Fonction(String name, Set<ItemAccesFonction> acces) {
        this.name = name;
        this.access = acces;
        this._id = name;
    }

    public Fonction(String name) {
        this.name = name;
        this.access = new HashSet<>();
        this._id = name;
    }

    public String getId() {
        return _id;
    }
    public void setId(String id) {
        this._id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Set<ItemAccesFonction> getAccess() {
        return access;
    }
    public void setAccess(Set<ItemAccesFonction> access) {
        this.access = access;
    }
}

这是我的&#34; ItemAccesFonction&#34;类和扩展它的那些:

@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.PROPERTY, property = "_class")
public class ItemAccesFonction {

    private String _id;
    private String _class;

    public ItemAccesFonction() {
        this._class = getClass().getCanonicalName();
    }

    public ItemAccesFonction(final String id) {
        this._id = id;
        this._class = getClass().getCanonicalName().toString();
    }

    public String getId() {
        return _id;
    }

    public void setId(final String idItemAcces) {
        this._id = idItemAcces;
    }
    public String get_class() {
        return _class;
    }

    public void set_class(final String _class) {
        this._class = _class;
    }
}

public class ApplicationFonction extends ItemAccesFonction{

private List<String> listeGroupes;

    public ApplicationFonction() {
        super();
        this.listeGroupes = new ArrayList<String>();
    }

    public ApplicationFonction(String id, List<String> listeGroupes) {
        super(id);
        this.listeGroupes = listeGroupes;
    }

    public List<String> getListeGroupes() {
        return listeGroupes;
    }

    public void setListeGroupes(final List<String> listeGroupes) {
        this.listeGroupes = listeGroupes;
    }
}

public class RepertoireFonction extends ItemAccesFonction{

    private String droitSelection;

    public RepertoireFonction() {
        super();
    }
    public RepertoireFonction(String id ,String droitSelection) {
        super(id);
        this.droitSelection = droitSelection;
    }

    public String getDroitSelection() {
        return droitSelection;
    }

    public void setDroitSelection(final String droitSelection) {
        this.droitSelection = droitSelection;
    }
}

我尝试更新Fonction时遇到问题。我收到以下错误,但不是每次都出错:

{
    "cause": {
        "cause": {
            "cause": null,
            "message": "Target bean of type com.wps.gp.datamongo.model.acces.ItemAccesFonction is not of type of the persistent entity (com.wps.gp.datamongo.model.acces.RepertoireFonction)!"
        },
        "message": "Could not read payload!; nested exception is java.lang.IllegalArgumentException: Target bean of type com.wps.gp.datamongo.model.acces.ItemAccesFonction is not of type of the persistent entity (com.wps.gp.datamongo.model.acces.RepertoireFonction)!"
    },
    "message": "Could not read an object of type class com.wps.gp.datamongo.model.Fonction from the request!; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: Could not read payload!; nested exception is java.lang.IllegalArgumentException: Target bean of type com.wps.gp.datamongo.model.acces.ItemAccesFonction is not of type of the persistent entity (com.wps.gp.datamongo.model.acces.RepertoireFonction)!"
}

有人知道我做错了什么吗? 感谢

0 个答案:

没有答案