Spring
[Jackson]양방향 관계Bidiractional relationship의 무한 참조Infinite recursion문제
hwijin97
2021. 9. 4. 16:53
JPA를 사용중
//...
@Entity(name = "user")
public class User{
//columns
@OneToMany(mappedBy = "user", fetch = FetchType.LAZY)
private List<Course> courses;
}
@Entity(name = "course")
public class Course {
//columns...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "user_id")
User user;
}
와 같은 양방향 관계가 있을때,
select course 쿼리로 course객체를 받아올때, LAZY fetch로 user는 안가져오는게 당연하지만,
course객체를 controller를 통해서 응답할때, Jackson에서 json으로 변환시 연관된 객체를 받아오는 쿼리를 날린다.
그래서 의도와는 다르게 fetch를 해서, infinite recursion 현상이 벌어진다.
해결 :
1. 주종관계에서, 주인 객체 컬럼에 @JsonBackReference (보통 foreign key를 지닌 테이블)
중속 객체 컬럼에 @JsonManagedReference 를 붙여주면 해결이된다.
https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion
2. 양방향 관계를 제거한다. (필요성을 다시한번 생각해봄)
3. 참조컬럼을 지닌 객체를 사용하는대신 DTO를 생성해서 사용한다.