I have two DTO objects that say that A and B have getters and setters and are used to get data from the database. The problem is that when I call A, B gets the call and B points to A again and a loop is created.
I cannot ignore / hide the method that creates the loop. I need to take all data A and B.
Is there any way to achieve this?
Please, help
This is my code that is causing the problem. This is a DTO application that calls the DTO environment
@OneToMany(mappedBy="application", fetch=FetchType.LAZY ,cascade=CascadeType.ALL ) public Set<EnvironmentDTO> getEnvironment() { return environment; } public void setEnvironment(Set<EnvironmentDTO> environment) { this.environment = environment; }
And this is the DTO environment calling the DTO application
@ManyToOne(targetEntity=ApplicationDTO.class ) @JoinColumn(name="fk_application_Id") public ApplicationDTO getApplication() { return application; } public void setApplication(ApplicationDTO application) { this.application = application; }
This is where the creation loop is created.
This is my callback that will produce the result in XML format, and I think that when creating an XML loop, it creates
@GET @Path("/get") @Produces({MediaType.APPLICATION_XML}) public List<ApplicationDTO> getAllApplications(){ List<ApplicationDTO> allApplication = applicationService.getAllApplication(); return allApplication; }
This is the application DTO class
@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<EnvironmentDTO> 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<EnvironmentDTO> getEnvironment() { return environment; } public void setEnvironment(Set<EnvironmentDTO> environment) { this.environment = environment; }
This is a DTO environment class
@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<InstanceDTO> 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<InstanceDTO> getInstances() { return instances; } public void setInstances(Set<InstanceDTO> instances) { this.instances = instances; } @ManyToOne(targetEntity=ApplicationDTO.class ) @JoinColumn(name="fk_application_Id")