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