프로젝트 초기에는 Event 테이블과 Board 테이블을 일대일 연관관계로 설계만 해놓고 양방향으로 매핑해주지는 않았다. 즉 Board 테이블에서는 Event 테이블을 호출할 가능성을 두었지만, Event 테이블에서 Board 테이블을 호출할 가능성은 두지 않은 단방향 일대일 매핑관계로 프로젝트를 설계했다.
그런데 기능을 추가하면서 Event 테이블에서 Board테이블을 호출해야 했고,
@OneToOne(mappedBy = "event", fetch = FetchType.LAZY)
private Board board;
이 매핑관계 코드를 주석처리했다가 주석처리를 해제해줬다. 그렇게 하니 프론트에서 ajax로 Event,Board 테이블과 통신할 때 저런 오류가 뜬 것이다. 엔티티 호출할 때 양방향 매핑관계 때문에 n+1으로 리턴됐기 때문이었다.
검색해보니 이 오류에는 여러가지 원인과 해결방안들이 있었다.
그 중 본인 프로젝트에서 적용한 방법은 @JsonIgnore
어노테이션을 붙여 프론트로 JSON 포맷의 데이터를 보낼 때 양방향 매핑으로 인해 생기는 순환참조 문제를 해결해주는 것이었다.
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Event {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "event_id")
private Long id;
private Integer categoryId;
@Column(length = 100)
private String name;
...
@JsonIgnore // here!
@OneToOne(mappedBy = "event", fetch = FetchType.LAZY)
private Board board;
...