Xml 使用JAXB在对象图中检测循环

Xml 使用JAXB在对象图中检测循环,xml,jaxb,jaxb2,Xml,Jaxb,Jaxb2,请问如何克服这个错误 @XmlRootElement(name="schema") @Entity public class SchemaBase implements Serializable{ /** * */ private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id_schema; private Strin

请问如何克服这个错误

@XmlRootElement(name="schema")
@Entity
public class SchemaBase implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 1L;

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id_schema;  
private String name_schema;
private String description_schema;
private String measuresCaption_schema;
private String defaultRole_schema;


@OneToMany (mappedBy="schema",cascade={CascadeType.MERGE,CascadeType.PERSIST})
private List<CubeBase> cubes;




 @XmlElementWrapper(name = "cube")  
   @XmlElement(name = "cube")
public List<CubeBase> getCubes() {
    return cubes;
}

public void setCubes(List<CubeBase> cubes) {
    this.cubes = cubes;
}



public int getId_schema() {
    return id_schema;
}
public void setId_schema(int id_schema) {
    this.id_schema = id_schema;
}
public String getName_schema() {
    return name_schema;
}
@XmlAttribute(name="name")
public void setName_schema(String name_schema) {
    this.name_schema = name_schema;
}
public String getDescription_schema() {
    return description_schema;
}
@XmlAttribute(name="description")
public void setDescription_schema(String description_schema) {
    this.description_schema = description_schema;
}
public String getMeasuresCaption_schema() {
    return measuresCaption_schema;
}
@XmlAttribute(name="measuresCaption")
public void setMeasuresCaption_schema(String measuresCaption_schema) {
    this.measuresCaption_schema = measuresCaption_schema;
}
public String getDefaultRole_schema() {
    return defaultRole_schema;
}
@XmlAttribute(name="defaultRole")
public void setDefaultRole_schema(String defaultRole_schema) {
    this.defaultRole_schema = defaultRole_schema;
}     
public void addCubeToShema(List<CubeBase> cubes){
   for(CubeBase cubeBase:cubes)
       cubeBase.setSchema(this);
   this.cubes=cubes;
}

}

这似乎是和的副本


(普通Java序列化具有处理这种情况的逻辑。我很惊讶JAXB没有这样做;这并不是很难做到。然后,我也很惊讶JAXB变得如此流行。)

在设置列表之前添加注释@XmlTransient,
在此示例中,您必须在addCubeToShema方法之前添加@XmlTransient。

这是错误:[com.sun.istack.internal.SAXException2:在对象图中检测到一个循环。这将导致无限深的XML:esprit.olap.domain。SchemaBase@1c57009->esprit.olap.domain。CubeBase@eeca3a->esprit.olap.domain。SchemaBase@1c57009]
@XmlRootElement(namespace ="esprit.olap.domain.SchemaBase")
@Entity
public class CubeBase implements Serializable{

/**
 * Private Attribute 
 */
private static final long serialVersionUID = 1L;




@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id_cube;
private String name_cube;
private String description_cube;
private String caption_cube;
private boolean visible;
private boolean cache;
private boolean enabled;

@ManyToOne
private SchemaBase schema;


public boolean isCache() {
    return cache;
}

public void setCache(boolean cache) {
    this.cache = cache;
}
public boolean isEnabled() {
    return enabled;
}

public void setEnabled(boolean enabled) {
    this.enabled = enabled;
}
public boolean isVisible() {
    return visible;
}

public void setVisible(boolean visible) {
    this.visible = visible;
}   

public SchemaBase getSchema() {
    return schema;
}

public void setSchema(SchemaBase schema) {
    this.schema = schema;
}
public int getId_cube() {
    return id_cube;
}

public void setId_cube(int id_cube) {
    this.id_cube = id_cube;
}
public String getName_cube() {
    return name_cube;
}

public void setName_cube(String name_cube) {
    this.name_cube = name_cube;
}
public String getDescription_cube() {
    return description_cube;
}

public void setDescription_cube(String description_cube) {
    this.description_cube = description_cube;
}
public String getCaption_cube() {
    return caption_cube;
}

public void setCaption_cube(String caption_cube) {
    this.caption_cube = caption_cube;
}

}