Jaxb映射双向关系

时间:2014-08-06 10:29:39

标签: java jaxb marshalling xml-binding

我有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;
    }

}

扩展Abstract Parent的条件类

@XmlRootElement
public class SelectConditionModel extends SelectConditionParentModel {

    String tableName;


    public String getTableName() {
        return columnFamily;
    }

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

}

请帮我解决这个问题。我也使用过XMLInverseReference,但它似乎无法正常工作。

2 个答案:

答案 0 :(得分:0)

尝试使用基于@XmlID和@XmlIDREF的configuration

或者你可以放@XmlTransient来排除子图。

答案 1 :(得分:0)

如果您使用EclipseLink JAXB(MOXy)作为JAXB(JSR-222)提供程序,那么您可以利用我们的@XmlInverseReference扩展来映射您的双向关系。

您可以在我的博客上找到完整的示例:

相关问题