[Spring] @OneToMany 순환참조 문제 해결하기

예원·2022년 7월 8일
1

Spring 글 모아보기

목록 보기
1/17

순환참조 문제 발생

user 와 board 를 일대다 양방향으로 작업했다.

public class User {

    @OneToMany(mappedBy = "user")
    private List<Board> boards = new ArrayList<>();
}
public class Board {

    @ManyToOne
    @JoinColumn(name = "user_id")
    private User user
}

테스트를 해보니 오류가 발생하였다.

java.lang.IllegalStateException: Cannot call sendError() after the response has been committed

이 문제는 UserBoard 가 서로의 객체를 가지고 있어 무한 루프가 발생하여 생긴 오류이다.

UserBorad를 조회하게 되고, 다시 BoardUser를 조회하게 된다. 이게 계속 반복되어 무한 루프가 발생하게 된 것이다.

해결 방법

@JsonIdentityInfo 또는 @JsonIgnore 를 사용해서 해결할 수 있다.

// @JsonIdentityInfo 사용
public class Board {

    @ManyToOne
    @JoinColumn(name = "user_id")
    @JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class)
    private User user;
}
// @JsonIgnore 사용
public class Board {

    @ManyToOne
    @JoinColumn(name = "user_id")
    @JsonIgnore
    private User user;
}

0개의 댓글