You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
다대일 매핑이 양방향 되어있는 Review-Student / Review-Course 와 같은 관계에서
전체 다(多)에 해당하는 entity 전체 리스트를 반환하는 연산을 수행할 경우(Review 전체를 반환)
해당 entity(Review)는 내부에 매핑된 entity(Student와 Course)를 멤버변수로 갖고 있기 때문에,
해당 entity 정보를 내부에 담아 반환합니다.
그리고 그렇게 담긴 entity(Student와 Course) 내부에도 양방향으로 매핑된 @onetomany List(reviewList)가 존재하기 때문에 해당 List(reviewList)가 다시 담겨 반환됩니다.
(설명이 좀 이해하기 어려운데 아래 이미지를 보시면 이해에 도움이 될 것 같습니다.)
그러면 전체 후기리스트 안에 > 하나의 후기 안에 > 해당 후기를 작성한 학생 안에 > 그 학생이 작성한 전체 후기리스트 안에 > 하나의 후기리스트 안에 > 해당 후기를 작성한 학생 안에 ...
이런 식으로 무한루프가 진행됩니다..ㅜ
해결 방법
- Getter 무한루프에 빠지지 않도록 @onetomany로 매핑된 List에는 @Getter(AccessLevel.NONE)을 선언해주어 더이상 Getter 접근을 할 수 없도록 끊어주어야 합니다. - 해당 처리를 하고 나면, 직접 데이터에 접근(@Getter와 같은 방법으로)할 때에만 매핑된 값을 가져오는 @ManyToOne(fetch=FetchType.LAZY) 조건을 없애주어야 합니다.
그렇지 않으면 매핑된 값을 가져오지 못해 org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor] 에러가 발생합니다. 한마디로 (fetch=FetchType.LAZY)를 삭제해야한다는 것입니다.
🚨 @JsonManagedReference 과 @JsonBackReference 를 사용하여 순환참조는 방지하되, List 객체에 Getter로 접근할 수 있도록 수정
🚨 @ManyToOne 쪽에 @JsonManageReference / @OneToMany 쪽에 @JsonBackReference 사용
문제 상황
다대일 매핑이 양방향 되어있는 Review-Student / Review-Course 와 같은 관계에서
전체 다(多)에 해당하는 entity 전체 리스트를 반환하는 연산을 수행할 경우(Review 전체를 반환)
해당 entity 정보를 내부에 담아 반환합니다.
(설명이 좀 이해하기 어려운데 아래 이미지를 보시면 이해에 도움이 될 것 같습니다.)
그러면
![image](https://user-images.githubusercontent.com/68639271/136829849-44e9121e-d255-4ee1-8a8e-2f9c7aeb9ff2.png)
전체 후기리스트 안에 > 하나의 후기 안에 > 해당 후기를 작성한 학생 안에 > 그 학생이 작성한 전체 후기리스트 안에 > 하나의 후기리스트 안에 > 해당 후기를 작성한 학생 안에 ...
이런 식으로 무한루프가 진행됩니다..ㅜ
해결 방법
- Getter 무한루프에 빠지지 않도록 @onetomany로 매핑된 List에는 @Getter(AccessLevel.NONE)을 선언해주어 더이상 Getter 접근을 할 수 없도록 끊어주어야 합니다.
![image](https://user-images.githubusercontent.com/68639271/136830019-2a3a5b9c-cc0a-4e53-b66a-ea8511d9d4ef.png)
- 해당 처리를 하고 나면, 직접 데이터에 접근(
@Getter
와 같은 방법으로)할 때에만 매핑된 값을 가져오는@ManyToOne(fetch=FetchType.LAZY)
조건을 없애주어야 합니다.그렇지 않으면 매핑된 값을 가져오지 못해
org.springframework.http.converter.HttpMessageConversionException: Type definition error: [simple type, class org.hibernate.proxy.pojo.bytebuddy.ByteBuddyInterceptor]
에러가 발생합니다.한마디로
(fetch=FetchType.LAZY)
를 삭제해야한다는 것입니다.@JsonManagedReference
과@JsonBackReference
를 사용하여 순환참조는 방지하되, List 객체에 Getter로 접근할 수 있도록 수정@ManyToOne
쪽에@JsonManageReference
/@OneToMany
쪽에@JsonBackReference
사용해결 후 실행 결과
참고 사항
The text was updated successfully, but these errors were encountered: