@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PostInfo {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private long postSeq;
'''//중간 코드 생략
@OneToMany(mappedBy = "postInfo", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<PostDetailImage> postDetailImages;
}
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class PostDetailImage {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long detailImageSeq;
@ManyToOne
@JoinColumn(name = "postSeq")
private PostInfo postInfo;
}
이렇게 2개의 Entity가 연관관계 맵핑을 이루고 있었고,
PostInfo를 조회하면 서로를 계속해서 조회되어 에러가 발생했었다.
@ManyToOne
@JoinColumn(name = "postSeq")
@JsonIgnore//추가한 어노테이션
private PostInfo postInfo;
@JsonIgnore를 추가하여 서로 조회하는 걸 막았다.
이 후 끝난 줄 알았지만 아니었다.
Fetch Join을 활용하여 N+1을 발생시키지 않고 코드를 구현하고 있었고,
데이터 값을 보내기 전, 서버에서 조회를 하는 순간
Handler dispatch failed; nested exception is java.lang.StackOverflowError
이러한 에러가 발생했고, 무한 순환 참조 에러였다.
@Entity
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString(exclude = {"postInfo"}) // 추가된 어노테이션
public class PostThumbnailImage {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private long thumbnailImageSeq;
@ManyToOne
@JoinColumn(name = "postSeq")
@JsonIgnore
private PostInfo postInfo;
}
@ToString을 사용하여 특정 필드를 toString에 포함되지 않게 하는것입니다.