My API shows me infinite loop for adress field
When I insert @JsonIgnore, @JsonManagedReference or @JsonBackReference I can clearly see one result as it should be, but than i don't have nested address fields.
What should I do to have also that address fields but one result?
These are my main entities:
1.Property
package com.realestate.petfriendly.entity;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonIgnore;
import java.io.Serializable;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import lombok.Data;
@Entity
@Data
@Table(name = "property")
public class Property {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_property")
private int id_property;
@Column(name = "title")
private String title;
@Column(name = "type")
private String type;
@Column(name = "room")
private String room;
@Column(name = "price")
private double price;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "address_id_address")
// @JsonBackReference
private Address address;
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id_user")
// @JsonBackReference
private User user;
}
- User
package com.realestate.petfriendly.entity;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name = "user")
class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_user")
private int id_user;
@Column(name = "username")
private String username;
@Column(name = "name")
private String name;
@Column(name = "lastname")
private String lastname;
@Column(name = "phone")
private String phone;
@Column(name = "notes")
private String notes;
@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "user_address_id_user_address")
// @JsonManagedReference
private UserAddress userAddress;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "user")
// @JsonManagedReference
private List<Property> property = new ArrayList<>();
}
- Address
package com.realestate.petfriendly.entity;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import lombok.Getter;
import lombok.Setter;
@Entity
@Getter
@Setter
@Table(name="address")
class Address{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_address")
private int id_address;
@Column(name = "city")
private String city;
@Column(name = "municipality")
private String municipality;
@Column(name = "place")
private String place;
@Column(name = "street")
private String street;
@Column(name = "house_number")
private double house_number;
@OneToOne(mappedBy = "address")
// @JsonManagedReference
private Property property;
}