Issue
I have resolved JSON recursive loop with @JsonIdentityInfo
through to Baeldung's blog1 (Thanks)
But now, another error occurs :
Method threw 'java.lang.StackOverflowError' exception. Cannot evaluate com.mezoo.tdc.model.Payment.toString()
Here my Registration object :
@Entity
@Table(name="Registration")
@JsonIdentityInfo( generator = ObjectIdGenerators.PropertyGenerator.class, property = "uuid")
public class Registration implements Serializable {
/*some private variables..*/
// Bidirectional relationship
@OneToMany(mappedBy="registration", cascade = {CascadeType.PERSIST, CascadeType.REMOVE, CascadeType.MERGE}, fetch = FetchType.LAZY)
private List<Payment> payment;
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("payment", payment)
.toString();
}
}
Now, Payment object :
@Entity
@Table(name="Payment")
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "uuid")
public class Payment implements Serializable {
@ManyToOne
@JoinColumn(name = "registration")
private Registration registration;
@Override
public String toString() {
return MoreObjects.toStringHelper(this)
.add("registration", registration)
.toString();
}
}
This is, what I see in debugger :
Please, what is wrong and why ?
Solution
Well, my guess is that Registration.toString()
prints the string representation of each payment in the list, and since Payment.toString()
includes the string representation of Registration
, Registration.toString()
is called again, which in turn calls Payment.toString()
again, and so on.
Try to return an empty string in Payment.toString()
to see if the problem goes away.
Answered By - crizzis
Answer Checked By - Marie Seifert (JavaFixing Admin)