Jaxb映射双向关系



我有一个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,但似乎它不工作。

尝试使用这个基于@XmlID和@XmlIDREF的配置。

或者您可以使用@XmlTransient来排除子图

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

你可以在我的博客上找到完整的例子:

  • http://blog.bdoughan.com/2013/03/moxys-xmlinversereference-is-now-truly.html

最新更新