나는 내 수업 중 봄에 여러 관계를 1 : 1로 가지고 있습니다. 그리고 내가 로그인하려고 할 때, 에러를 얻습니다. 이것은 무한 재귀와 같습니다, 여기에 전체 에러 메시지가 있습니다.com.fasterxml.jackson.databind.ser.BeanSerializer.serialize Spring JPA
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:155) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serializeContents(CollectionSerializer.java:149) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:112) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.CollectionSerializer.serialize(CollectionSerializer.java:25) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.BeanPropertyWriter.serializeAsField(BeanPropertyWriter.java:704) ~[jackson-databind-2.8.10.jar:2.8.10]
at com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFields(BeanSerializerBase.java:689) ~[jackson-databind-2.8.10.jar:2.8.10]
나는 서로 연결된 5 개의 클래스가 있습니다. 여기 그들은 :
가@Entity
public class AppUser implements UserDetails {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
@Column(unique = true)
private String username;
private String password;
@ElementCollection(fetch = FetchType.EAGER)
private List<String> roles = new ArrayList<>();
@ManyToOne
@JoinColumn(name = "apartmen_id")
@JsonIgnoreProperties(value = {"apartmen_tenats"}, allowSetters=true)
private Apartmen apartmen; // apartmen in which he lives
@ManyToOne
@JoinColumn(name = "institution_id")
@JsonIgnoreProperties(value = {"workers"}, allowSetters=true)
private Institution institution; // institution in which he works
@OneToMany(mappedBy = "worker")
@JsonIgnoreProperties(value = {"worker"}, allowSetters = true)
private Set<Failure> failures; // Kvarovi na kojima je radio
}
번째 클래스 :
가@Entity
public class Failure implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String description; // Opis kvara
@Temporal(TemporalType.TIMESTAMP)
private Date dateCreated; // Datum i vreme kada je kvar kreiran
@Temporal(TemporalType.TIMESTAMP)
private Date dateSolved; // Datum i vreme kada je kvar popravljen
private boolean solved; // Da li je kvar popravljen
@ManyToOne
@JoinColumn(name = "app_user_id")
@JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
private AppUser worker; // Radnik koji je zaduzen za kvar
@ManyToOne
@JoinColumn(name = "institution_id")
@JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
private Institution institution; // Institucija kojoj je kvar prijavljen
@ManyToOne
@JoinColumn(name = "building_id")
@JsonIgnoreProperties(value = {"failures"}, allowSetters=true)
private Building building; // Zgrada u kojoj je kvar nastao
}
번째 클래스 :
가@Entity
public class Building implements Serializable{
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String location;
private String owner; // Vlasnik zgrade
private int numberOfApartments;
private int numberOfAparartmentsWithTenats; // Broj stanova koji su naseljeni
private boolean hasPresident; // Oznacava da li zgrada ima predsednika skupstine stanara
@OneToMany(mappedBy = "apartmenBuilding")
@JsonIgnoreProperties(value = {"apartmenBuilding"}, allowSetters = true)
private Set<Apartmen> apartments; // stanovi u zgradi
@ManyToMany(mappedBy = "buildings")
@JsonIgnoreProperties(value = {"buildings"}, allowSetters = true)
private Set<Institution> institutions;
@OneToMany(mappedBy = "building", fetch = FetchType.EAGER)
@JsonIgnoreProperties(value = {"building"}, allowSetters = true)
private List<Failure> failures; // Kvarovi koji su nastali u zgradi
}
네번째 분류 :
@Entity
public class Institution {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String location;
private String director;
private String email;
private String contactPhone;
private String webSiteUrl;
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.MERGE)
@JoinTable(name = "institution_building",
joinColumns = @JoinColumn(name = "institution_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "building_id", referencedColumnName = "id"))
@JsonIgnoreProperties(value = {"institutions"}, allowSetters=true)
private Set<Building> buildings; // Buildings which this institution is maintaining
@OneToMany(mappedBy = "institution")
@JsonIgnoreProperties(value = {"institution"}, allowSetters = true)
private Set<AppUser> workers;
@OneToMany(mappedBy = "institution", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JsonIgnoreProperties(value = {"institution"}, allowSetters = true)
private Set<Failure> failures; // Kvarovi na kojima je radila institucija
}
마지막 클래스 인 :
@Entity
public class Apartmen implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String name;
private String location;
private String owner;
private int numberOfTenats;
private boolean hasApartmentBuilding;
private boolean hasOwner;
@ManyToOne
@JoinColumn(name = "building_id")
@JsonIgnoreProperties(value = {"apartments"}, allowSetters=true)
private Building apartmenBuilding;
@OneToMany(mappedBy = "apartmen")
@JsonIgnoreProperties(value = {"apartmen"}, allowSetters = true)
private Set<AppUser> apartmen_tenats;
}
왜 그런지는 모르겠지만 실패 클래스와의 관계 때문일 수 있습니다. 그 클래스는 내 코드에서 다른 모든 클래스와 관계가 있기 때문에 그럴 수도 있다고 생각합니다. 그렇다면 왜 그런 일이 일어나고 어떻게 제대로 수행하는지 나와 함께 보여주십시오.
미리 감사드립니다.
기본적으로 JSON 직렬화이며 JPA API는 아닙니다. 전혀 다른 프로세스 – DN1