title: A cycle is detected in the object graph. This will cause infinitely deep XML
body: <p>I have two DTO objects say A and B which are having getters and setters and are used to take data from the database. The problem is when I am calling A, B gets called and B again points itself to A and a cycle is created. </p>
  
  <p>I cannot ignore/hide the method which is creating the cycle. I need to take the whole data of A and B.</p>
  
  <p>Is there any way to achieve it ?</p>
  
  <p>Please help</p>
  
  <p>This is my code which is causing the problem. This is application DTO which is calling environment DTO</p>
  
  <pre><code>@OneToMany(mappedBy="application", fetch=FetchType.LAZY
          ,cascade=CascadeType.ALL
          )
  public Set&lt;EnvironmentDTO&gt; getEnvironment() {
      return environment;
  }
  
  public void setEnvironment(Set&lt;EnvironmentDTO&gt; environment) {
      this.environment = environment;
  }
  </code></pre>
  
  <p>And this is environment DTO which is calling the application DTO</p>
  
  <pre><code>@ManyToOne(targetEntity=ApplicationDTO.class )
  @JoinColumn(name="fk_application_Id") 
  public ApplicationDTO getApplication() {
      return application;
  }
  
  public void setApplication(ApplicationDTO application) {
      this.application = application;
  }
  </code></pre>
  
  <p>Here cycle is getting created</p>
  
  <p>This is my rest call which will give result in XML format and I think while creating XML cycle is getting created</p>
  
  <pre><code>@GET
  @Path("/get")
  @Produces({MediaType.APPLICATION_XML})
  public List&lt;ApplicationDTO&gt; getAllApplications(){
      List&lt;ApplicationDTO&gt; allApplication = applicationService.getAllApplication();
      return allApplication;
  }
  </code></pre>
  
  <p>This is the Application DTO class</p>
  
  <pre><code>@Entity
  @Table(name="application")
  @org.hibernate.annotations.GenericGenerator(
  name ="test-increment-strategy",strategy = "increment")
  
  @XmlRootElement
  public class ApplicationDTO implements Serializable {
  
  @XmlAttribute
  public Long appTypeId;
  
  private static final long serialVersionUID = -8027722210927935073L;
  
  private Long applicationId;
  
  private String applicationName;
  
  private ApplicationTypeDTO applicationType;
  
  private String applicationDescription;
  
  private Integer owner;
  
  private Integer createdBy;
  
  private Integer assignedTo;
  
  private Date createTime;
  
  private Date modifiedTime;
  
  private Set&lt;EnvironmentDTO&gt; environment;
  
  @Id
  @GeneratedValue(generator = "test-increment-strategy")
  @Column(name = "applicationId")
  public Long getApplicationId() {
      return applicationId;
  }
  
  private void setApplicationId(Long applicationId) {
      this.applicationId = applicationId;
  }
  
  @Column(name = "applicationName")
  public String getApplicationName() {
      return applicationName;
  }
  
  public void setApplicationName(String applicationName) {
      this.applicationName = applicationName;
  }
  
  @ManyToOne(targetEntity=ApplicationTypeDTO.class 
          ,fetch = FetchType.LAZY
          )
  @JoinColumn(name="applicationType")
  
  public ApplicationTypeDTO getApplicationType() {
      return applicationType;
  }
  
  public void setApplicationType(ApplicationTypeDTO applicationType) {
      this.applicationType = applicationType;
  }
  
  @Column(name = "description")
  public String getApplicationDescription() {
      return applicationDescription;
  }
  
  public void setApplicationDescription(String applicationDescription) {
      this.applicationDescription = applicationDescription;
  }
  
  @Column(name = "owner")
  public Integer getOwner() {
      return owner;
  }
  
  public void setOwner(Integer owner) {
      this.owner = owner;
  }
  
  @Column(name = "createdBy")
  public Integer getCreatedBy() {
      return createdBy;
  }
  
  public void setCreatedBy(Integer createdBy) {
      this.createdBy = createdBy;
  }
  
  @Column(name = "assignedTo")
  public Integer getAssignedTo() {
      return assignedTo;
  }
  
  public void setAssignedTo(Integer assignedTo) {
      this.assignedTo = assignedTo;
  }
  
  @Column(name = "createTime")
  public Date getCreateTime() {
      return createTime;
  }
  
  public void setCreateTime(Date createTime) {
      this.createTime = createTime;
  }
  
  @Column(name = "modifiedTime")
  public Date getModifiedTime() {
      return modifiedTime;
  }
  
  public void setModifiedTime(Date modifiedTime) {
      this.modifiedTime = modifiedTime;
  }
  
  @OneToMany(mappedBy="application", fetch=FetchType.LAZY
          ,cascade=CascadeType.ALL
          )
  public Set&lt;EnvironmentDTO&gt; getEnvironment() {
      return environment;
  }
  
  public void setEnvironment(Set&lt;EnvironmentDTO&gt; environment) {
      this.environment = environment;
  }
  </code></pre>
  
  <p>This is the Environment DTO class</p>
  
  <pre><code>@Entity
  @Table(name="environment")
  
  @org.hibernate.annotations.GenericGenerator(
  name = "test-increment-strategy",
  strategy = "increment")
  @XmlRootElement
  public class EnvironmentDTO implements Serializable {
  
  @XmlAttribute
  public Long envTypeId;
  
  @XmlAttribute
  public Long appId;
  
  private static final long serialVersionUID = -2756426996796369998L;
  
  private Long environmentId;
  
  private String environmentName;
  
  private EnvironmentTypeDTO environmentType;
  
  private Integer owner;
  
  private Date createTime;
  
  private Set&lt;InstanceDTO&gt; instances;
  
  private ApplicationDTO application;
  
  @Id
  @GeneratedValue(generator = "test-increment-strategy")
  @Column(name = "envId")
  public Long getEnvironmentId() {
      return environmentId;
  }
  
  private void setEnvironmentId(Long environmentId) {
      this.environmentId = environmentId;
  }
  
  @Column(name = "envName")
  public String getEnvironmentName() {
      return environmentName;
  }
  
  public void setEnvironmentName(String environmentName) {
      this.environmentName = environmentName;
  }
  
  @ManyToOne(targetEntity=EnvironmentTypeDTO.class)
  @JoinColumn(name = "envType")
  public EnvironmentTypeDTO getEnvironmentType() {
      return environmentType;
  }
  
  public void setEnvironmentType(EnvironmentTypeDTO environmentType) {
      this.environmentType = environmentType;
  }
  
  @Column(name = "owner")
  public Integer getOwner() {
      return owner;
  }
  
  public void setOwner(Integer owner) {
      this.owner = owner;
  }
  
  @Temporal(TemporalType.DATE)
  @Column(name = "createTime")
  public Date getCreateTime() 
  {
      return createTime;
  }
  
  public void setCreateTime(Date createTime) {
      this.createTime = createTime;
  }
  
  @OneToMany(mappedBy="environment", cascade=CascadeType.ALL, fetch = FetchType.EAGER)
  public Set&lt;InstanceDTO&gt; getInstances() {
      return instances;
  }
  
  public void setInstances(Set&lt;InstanceDTO&gt; instances) {
      this.instances = instances;
  }
  
  @ManyToOne(targetEntity=ApplicationDTO.class )
  @JoinColumn(name="fk_application_Id")
  //@XmlTransient 
  public ApplicationDTO getApplication() {
      return application;
  }
  
  public void setApplication(ApplicationDTO application) {
      this.application = application;
  }
  </code></pre>