Двусторонняя связь Jaxb Mapping

У меня есть List<SelectConditionHeaderModel>,

Когда я пишу этот список, я получаю сообщение об ошибке:

javax.xml.bind.MarshalException
 - with linked exception:
[com.sun.istack.internal.SAXException2: A cycle is detected in the object graph. This will cause infinitely deep XML

Мой абстрактный родительский класс.

@XmlRootElement
@XmlSeeAlso({ SelectConditionHeaderModel.class,
        SelectConditionModel.class })
public abstract class SelectConditionParentModel {

    @XmlInverseReference(mappedBy = "conditionList")
    SelectConditionParentModel parent;

    public SelectConditionParentModel getParent() {
        return parent;
    }

    public void setParent(HbaseSelectConditionParentModel parent) {
        this.parent = parent;
    }

}

Класс заголовка, расширяющий абстрактный родительский класс

@XmlRootElement
public class SelectConditionHeaderModel extends
        SelectConditionParentModel {

    List<SelectConditionParentModel> conditionList;

    String header;

    public List<SelectConditionParentModel> getConditionList() {
        return conditionList;
    }

    public void setConditionList(List<SelectConditionParentModel> condition) {
        this.conditionList = condition;
    }

    public String getHeader() {
        return header;
    }

    public void setHeader(String header) {
        this.header = header;
    }

}

Класс условий, расширяющий абстрактный родительский класс

@XmlRootElement
public class SelectConditionModel extends SelectConditionParentModel {

    String tableName;


    public String getTableName() {
        return columnFamily;
    }

    public void setTableName(String tableName) {
        this.tableName = tableName;
    }

}

Пожалуйста, помогите мне с этим. Я также использовал XMLInverseReference, но кажется, что он не работает.

3 ответа

Попробуйте использовать эту конфигурацию на основе @XmlID и @XmlIDREF.

или вы можете поставить @XmlTransient, чтобы исключить подграф.

Я предлагаю вам это решение.. У меня была та же проблема, но я решил @XmlTransient.

Я надеюсь помочь вам.

Если вы используете EclipseLink JAXB (MOXy) в качестве поставщика JAXB (JSR-222), вы можете использовать наш @XmlInverseReference расширение для отображения ваших двунаправленных отношений.

Вы можете найти полный пример в моем блоге:

Другие вопросы по тегам